2010-10-15 10 views
7

Khi Mathematica đánh giá một ô, nó sẽ cung cấp ô đầu vào và ô đầu ra là CellLabel s In[$Line]:=Out[$Line]= trong đó $ Line là bộ đếm được tăng lên trên mỗi đầu vào được đánh giá.Điều gì tạo ra các CellLabels In/Out trong Mathematica và làm thế nào tôi có thể thêm Timing tự động cho chúng?

Nếu bạn nhập một cái gì đó như TraditionalForm[expr] hoặc TeXForm[expr] (hoặc bất kỳ biểu mẫu * khác từ $OutputForms) thì tên của biểu mẫu cũng sẽ được thêm vào nhãn của ô đầu ra. ví dụ: Out[1]//TraditionalForm=.

Tôi không thể tìm thấy bất kỳ cách nào để tùy chỉnh các nhãn này.

  • Chúng có thể bị tắt trong hộp thoại Tùy chọn.

  • Họ dường như không có trong các tùy chọn StyleSheet cho Input và Output tế bào - mặc dù các tùy chọn liên quan đến hành vi CellLabel ở đó.

  • Cũng trong các tùy chọn Máy tính xách tay - mặc dù trong Option Inspector: Máy tính xách tay Tùy chọn> Đánh giá Tùy chọn> EvaluationCompletionAction có thể sửa đổi các CellLabels bằng cách thêm một dấu thời gian. Nó cũng có thể hiển thị Thời gian trong StatusArea, bit mà nó sẽ bị xóa ngay sau khi có nội dung khác in ở đó.

  • Cũng không phải loại initm nào configuration files.

Vì vậy, có ai biết nơi các CellLabels này được tạo không?


Cụ thể, tôi muốn thêm Timing vào ô CellLabel cho ô đầu ra.

+0

Câu hỏi này tiếp theo từ nỗ lực của tôi để trả lời câu hỏi tại http://www.physicsforums.com/showthread.php?t=438079 – Simon

+0

Bạn có muốn tùy chỉnh kiểu hoặc nội dung của nhãn không? –

+0

Tôi đoán nội dung. Ý tưởng ban đầu là đặt Timing vào nhãn cho một ô Output. – Simon

Trả lời

6

OK, thảo luận về Physics Forums đã dẫn đến giải pháp khá hackish này (bây giờ là dọn dẹp một chút):

SetAttributes[Timeit, HoldAll] 
Timeit[x_] := With[{t = Timing[x]}, Module[{out, form}, 
    If[TrueQ[MemberQ[$OutputForms, Head[t[[2]]]]], 
    out = First[t[[2]]]; form = "//" <> ToString[Head[t[[2]]]], 
    out = t[[2]]; form = ""]; 
    If[out === Null, Null, 
    CellPrint[ExpressionCell[t[[2]], "Output", CellLabelAutoDelete -> False, 
     CellLabel -> StringJoin["(", ToString[t[[1]]], ")", 
     "Out[", ToString[$Line], "]", form, "="]]]; 
    Unprotect[Out]; Out[$Line] = out; Protect[Out]; out;]];] 
$Pre = Timeit; 

Để thực hiện CellLabels dai dẳng để bạn không bị mất thời gian khi bạn Lưu và Tải sổ ghi chép, bạn có thể sửa đổi biểu định kiểu để các ô đầu ra có tùy chọn CellLabelAutoDelete -> True. (Chỉnh sửa: Bây giờ được thêm vào lệnh CellPrint.)

Bất kỳ giải pháp nào tốt hơn đều được hoan nghênh.

+0

+1 vì không bảo vệ "Out" ở cuối. Không, nghiêm túc ... bạn có tin rằng điều này sẽ tồn tại trong một vài phiên bản? Nó hấp dẫn ... –

+0

Tôi đoán tôi chỉ cố gắng làm cho nó hoạt động - không thực sự nghĩ về sự mạnh mẽ. Tôi thấy không có lý do gì mà điều này sẽ không hoạt động trong các bản phát hành trong tương lai. Cơ chế CellLabel vv đã có từ V3. Tuy nhiên, phải có một cách đẹp hơn. – Simon

+0

@Simon Tôi nghĩ rằng tôi sẽ cho nó một thử ... thời gian tất cả có vẻ là một ý tưởng tốt đẹp! những thứ khác như tự động // MatrixForm cho danh sách đơn giản có thể được thực hiện cẩn thận. –

6

Cách khác để thực hiện việc này là đặt EvaluationCompletionAction -> "ShowTiming" sẽ hiển thị thông tin thời gian trên thanh trạng thái của cửa sổ sổ ghi chép sau mỗi lần đánh giá.

alt text

+0

Cảm ơn ragfield. Mặc dù tôi đã đề cập rằng trong chuỗi Diễn đàn Vật lý được liên kết ở trên. Vấn đề chính với giải pháp này là thời gian chỉ ở đó cho đến khi một cái gì đó khác in vào thanh trạng thái. – Simon

+0

Bí quyết tuyệt vời! Ngạc nhiên là tôi chưa bao giờ gặp phải tùy chọn này trước đây. Làm cho tôi tự hỏi những gì khác EvaluationCompletionAction có thể được sử dụng cho ... – telefunkenvf14

2

Có thể thêm timestamps đánh giá để nhãn tế bào Mathematica bằng cách chọn "AddTimeStamp" trong các thiết lập tùy chọn thanh tra cho EvaluationCompletionAction. Hơn nữa, một danh sách các tùy chọn có thể được đưa ra bằng cách chỉnh sửa mục nhập, vì vậy sử dụng {"ShowTiming", "AddTimeStamp"} Tôi nhận được cả thời gian đánh giá trên thanh trạng thái và dấu thời gian đầu vào và đầu ra trong nhãn ô.

Các vấn đề liên quan