是的,Wolfram Workbench確實有一個分析器,儘管according to the documentation輸出結果並不完全符合您的要求。
我應該注意到,Mr.Wizard在評論中提出的問題 - 緩存的結果會導致不同的計時結果 - 也可以應用於配置文件。
如果你想做一些只在數學,你可以嘗試這樣的:
myProfile[fun_Symbol,inputs_List]:=
TableForm[#[[{1,3,2}]]&/@ (Join @@@ ({Timing[f[#]],#} & /@ inputs))]
如果你足夠高興有輸出爲{定時調整,輸出,輸入},而不是{時機,輸入,輸出}如您的問題中所述,您可以擺脫#[[{1,3,2}]]
位。
編輯
因爲我有工作臺,這裏就是一個例子。我有一個包AdvancedPlots
其中包括一個功能CobwebPlot
(是的,功能本身可以改善)。
CobwebPlot[x_?MatrixQ, opts___Rule] /;
And @@ (NumericQ /@ Flatten[x]) :=
Module[{n, \[Theta]s, numgrids, grids, struts, gridstyle, min, max,
data, labels, epilabels, pad},
n = Length[First[x]];
\[Theta]s = (2 \[Pi])/n Range[0, n] + If[OddQ[n], \[Pi]/2, 0];
numgrids =
If[IntegerQ[#] && Positive[#], #,
NumberofGrids /.
Options[CobwebPlot] ] & @ (NumberofGrids /. {opts});
{min, max} = {Min[#], Max[#]} &@ Flatten[x];
gridstyle = GridStyle /. {opts} /. Options[CobwebPlot];
pad = CobwebPadding /. {opts} /. Options[CobwebPlot];
grids =
Outer[List, \[Theta]s, FindDivisions[{0, max + 1}, numgrids]];
struts = Transpose[grids];
labels = CobwebLabels /. {opts} /. Options[CobwebPlot];
epilabels =
If[Length[labels] == n,
Thread[Text[
labels, (1.2 max) Transpose[{Cos[Most[\[Theta]s]],
Sin[Most[\[Theta]s]]}]]], None];
data = Map[Reverse,
Inner[List, Join[#, {First[#]}] & /@ x, \[Theta]s, List], {2}];
Show[ListPolarPlot[grids, gridstyle, Joined -> True, Axes -> False,
PlotRangePadding -> pad],
ListPolarPlot[struts, gridstyle, Joined -> True, Axes -> False],
ListPolarPlot[data,
Sequence @@ FilterRules[{opts}, Options[ListPolarPlot]],
Sequence @@
FilterRules[Options[CobwebPlot], Options[ListPolarPlot]],
Joined -> True, Axes -> None] ,
If[Length[labels] == n, Graphics /@ epilabels,
Sequence @@ FilterRules[{opts}, Options[Graphics]] ]]
]
在調試模式下運行包
,然後運行該筆記本
提供了以下輸出。
相關:http://stackoverflow.com/questions/3418892/profiling-memory-usage-in-mathematica – abcd
另請參閱:http://stackoverflow.com/questions/4721171/performance-tuning-in-mathematica –
所有:我試圖用'TraceScan'來做到這一點,但我我遇到了Mathematica緩存結果的問題,因此,例如,對「Prime [13!]」的連續調用需要大不相同的時間進行評估。 –