| New Reply |
Mathematica - Show timing in output line |
Share Thread | Thread Tools |
| Oct14-10, 05:09 PM | #1 |
|
|
Mathematica - Show timing in output line
While I know there exists:
In[1]:= Timing[Integrate[blah]] Out[1]:= {result,time it took to calculate} Is there a way to just have the time it took to process a step appear in the Out[1]:= part, or after every step rather than having to use the Timing function and then pull out the index? If I say Result = Timing[process][[1]] then I get the result but don't see the timing, I'd have to put the Timing[xxx][[2]] after everything, and this is tedious. Can I customize the output lines to include this? |
| Oct14-10, 07:53 PM | #2 |
|
|
The Timing function actually returns the result in the other order
In[1]:= Timing[Integrate[blah]] Out[1]:= {time, result} where time is the process time of the kernel. If you want to just suppress the result then you could use In[1]:= Timing[Integrate[blah];] Out[1]:= {time, Null} If you don't want to have to type Timing every time, then there's a couple of options. 1) You could set the variable $Pre to $Pre = Timing or $Pre = Timing[#][[1]] & (* just print timing, never the result *) 2) Go to the Option Inspector (Shift-Ctrl-O), Notebook Options > Evaluation Options > EvaluationCompletionAction and choose either ShowTiming and/or AddTimeStamp. ShowTiming only shows the timing in the StatusArea -- it's not permanent. 3) What you really wanted was to change the CellLabels for Output cells. I'm not sure how to do this. I think that this is neither a Notebook option nor a StyleSheet option. It must be in another configuration location. (nb you can turn off the In/Out labels in the Preferences). Maybe using $Pre and $Post you could hack a way of modifying the Output CellLabel as it's generated. Look at the example in the CellLabel documentation. I hope something there helps! |
| Oct14-10, 08:40 PM | #3 |
|
|
Thanks! Screwing around with it I did:
Clear[$Pre]; Clear[$Post]; Clear[$Pre]; Clear[$Post]; Evaluation::Timing = "Process took `1` seconds to complete."; $Pre = Timing; $Post = (Message[Evaluation::Timing, #[[1]]]; #[[2]]) &; (The first things are just from debugging and having to clear stuff up) This makes a message after everything you output with the time it took to run. Now I just add this to the initialization stuff I have in every notebook and I'm good to go! Thanks for the ideas. |
| Oct14-10, 08:46 PM | #4 |
|
|
Mathematica - Show timing in output line
actually, while that works it gets real ugly later. I just made instead:
Evaluation::Timing = "Process took `1` seconds to complete."; Timeit[x_] := (Message[Evaluation::Timing, Timing[x][[1]]]; Timing[x][[2]]) To use instead of Timing, this puts the time it took into a message while still giving me my output, though I wonder if it is evaluating twice... |
| Oct14-10, 09:27 PM | #5 |
|
|
I don't think that your Timeit is working.
The inside expression gets evaluated before Timeit is called - so it always say that the time taken is 0. Evaluation::Timing = "Process took `1` seconds to complete."; Timeit[x_] := With[{t = Timing[x]}, (Message[Evaluation::Timing, t[[1]]]; t[[2]])] SetAttributes[Timeit, HoldAll] $Pre = Timeit; This seems to work like a charm. Although I'd still like to have a way of using the CellLabel option rather than using a Message. |
| Oct15-10, 03:40 PM | #6 |
|
|
I think I got it, but still working out some formatting stuff:
Code:
Timeit[x_] := With[{t = Timing[x]}, CellPrint[ ExpressionCell[StandardForm[t[[2]]], "Output", CellLabel -> StringJoin["(", ToString[t[[1]]], ")", "Out[", ToString[$Line], "]:="]]]]
SetAttributes[Timeit, HoldAll]
$Pre = Timeit;
Integrate[Sin[x] Exp[-x/5] x^2/(1 - 5 x), {x, 43, 434652.532}] does it work? |
| Oct15-10, 03:41 PM | #7 |
|
|
but if you call the previous result with "%" it's not the output but the full thing... hmm.
\!\(\* TagBox[ FormBox[ RowBox[{"Cell", "[", RowBox[{ RowBox[{"BoxData", "[", RowBox[{"TagBox", "[", RowBox[{ RowBox[{"FormBox", "[", RowBox[{ RowBox[{"RowBox", "[", RowBox[{"{", RowBox[{ RowBox[{"RowBox", "[", RowBox[{"{", RowBox[{"\<\"-\"\>", ",", "\<\"0.0006293585747159831`\"\>"}], "}"}], "]"}], ",", "\<\"+\"\>", ",", RowBox[{"RowBox", "[", RowBox[{"{", RowBox[{"\<\"0.`\"\>", ",", "\<\" \"\>", ",", "\<\"\[ImaginaryI]\"\>"}], "}"}], "]"}]}], "}"}], "]"}], ",", "StandardForm"}], "]"}], ",", "StandardForm", ",", RowBox[{"Editable", "->", "True"}]}], "]"}], "]"}], ",", "\<\"Output\"\>", ",", RowBox[{"CellLabel", "->", "\<\"(7.02)Out[4]:=\"\>"}]}], "]"}], StandardForm], StandardForm, Editable->True]\) |
| Oct15-10, 04:50 PM | #8 |
|
|
Nice work!
OK... this is getting a bit hackish. But if you use the following then % (Out) works ok and you don't get Null's being printed when there is not meant to be an output. Code:
Unprotect[Out];
SetAttributes[Timeit, HoldAll]
Timeit[x_] := With[{t = Timing[x]}, If[t[[2]] === Null, Null,
CellPrint[
ExpressionCell[t[[2]], "Output",
CellLabel ->
StringJoin["(", ToString[t[[1]]], ")", "Out[", ToString[$Line],
"]:="]]];
Out[$Line] = t[[2]];]]
$Pre = Timeit;
You can fix this by modifying the StyleSheet (copy the Output style from Core.nb into the notebook's stylesheet) so that the Output cells now have Code:
CellLabelAutoDelete->False Code:
SetOptions[EvaluationNotebook[], CellLabelAutoDelete -> False] |
| Oct15-10, 07:21 PM | #9 |
|
|
By the way, I've turned this into a stackoverflow question:
http://stackoverflow.com/q/3938827/421225 |
| Nov11-10, 03:51 PM | #10 |
|
|
Just for the sake of completeness, here's an updated version that plays nicer with the various $OutputForms:
Code:
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",
CellLabel -> StringJoin["(", ToString[t[[1]]], ")",
"Out[", ToString[$Line], "]", form, "="]]];
Unprotect[Out]; Out[$Line] = out; Protect[Out]; out;]];]
$Pre = Timeit;
|
| New Reply |
| Thread Tools | |
Similar Threads for: Mathematica - Show timing in output line
|
||||
| Thread | Forum | Replies | ||
| [mathematica]- problem with the output | Math & Science Software | 2 | ||
| Mathematica Output Display | Math & Science Software | 4 | ||
| Mathematica: Function output to array | Math & Science Software | 1 | ||
| Mathematica showing strange output for elliptic integral | Calculus & Beyond Homework | 1 | ||
| testing mathematica TeX output in PF | Math & Science Software | 11 | ||