Ja, Wolfram Workbench hat tatsächlich einen Profiler, obwohl laut der Dokumentation die Ausgabe nicht ganz in der Form ist, die Sie möchten.
Ich sollte darauf hinweisen, dass das von Herrn Wizard in den Kommentaren angesprochene Problem - dass zwischengespeicherte Ergebnisse zu unterschiedlichen Zeitmessungsergebnissen führen werden - sich auch im Profilieren zeigen kann.
Wenn Sie etwas ausschließlich in Mathematica machen möchten, könnten Sie Folgendes versuchen:
myProfile[fun_Symbol,inputs_List]:=
TableForm[#[[{1,3,2}]]&/@ (Join @@@ ({Timing[f[#]],#} & /@ inputs))]
Wenn Sie damit zufrieden wären, die Ausgabe als {Zeitmessung, Ausgabe, Eingabe} zu haben, anstatt {Zeitmessung, Eingabe, Ausgabe} wie in Ihrer Frage angegeben, könnten Sie den #[[{1,3,2}]]
Teil loswerden.
BEARBEITEN
Da ich Workbench habe, hier ist ein Beispiel. Ich habe ein Paket AdvancedPlots
, das eine Funktion CobwebPlot
enthält (und ja, die Funktion selbst könnte verbessert werden).
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]] ]]
]
Das Paket im Debug-Modus ausführen
Und dann dieses Notebook ausführen
Gibt die folgende Ausgabe.