2013-06-26 6 views
15

Ich möchte erfassen und plotten die Ergebnisse von 5 oder so timeit Anrufe mit logarithmisch steigenden Größen von N zu zeigen, wie methodX() mit Eingabe skaliert.Kannst du die Ausgabe von ipythons magischen Methoden erfassen? (timeit)

Bisher habe ich versucht:

output = %timeit -r 10 results = methodX(N) 

Es funktioniert nicht ...

Kann nicht info finden in den beiden docs. Ich denke, du solltest zumindest die gedruckte Zeichenkette abfangen können. Danach kann ich es analysieren, um meine Informationen zu extrahieren.

Hat jemand dies getan oder versucht?

PS: Dies ist in einem Ipython-Notebook, wenn das ein Unterschied macht.

+0

möglich Duplikat [Capture the Ergebnis einer IPython magischen Funktion] (http://stackoverflow.com/questions/25289437/capture-the-result-of-an-ipython-magic-function) – Iguananaut

Antwort

17

Diese doppelte Frage Capture the result of an IPython magic function hat eine answer, die zeigt, dass dies seither implementiert wurde.

Aufruf die %timeit Magie mit der -o Option wie:

%timeit -o <statement> 

gibt ein TimeitResult Objekt, das mit allen Informationen über den %timeit Lauf als Attribut ein einfaches Objekt ist. Zum Beispiel:

In [1]: result = %timeit -o 1 + 2 
Out[1]: 10000000 loops, best of 3: 23.2 ns per loop 

In [2]: result.best 
Out[2]: 2.3192405700683594e-08 
+0

Dies scheint nur für einige magische Befehle spezifisch zu sein (vielleicht nur '% zeit? '). Es funktioniert nicht mit '%% timeit'. Verwenden Sie 'result = %% timeit -o', da die Zeile einer Zelle' None' zurückgibt. –

+2

@ StevenC.Howell Sie können '%% timeit -o' ohne Zuweisung verwenden. Es wird ein 'TimeitResult'-Objekt zurückgeben und dank IPythons Ausgabe-Capture können Sie das Ergebnis durch Zugriff auf' _' abrufen. – user2923419

0

PS: Dies ist in einem Ipython-Notebook, wenn das ein Unterschied macht.

Nein, tut es nicht.

Auf dev gibt es te %%capture Zelle Magie. Der andere Weg wäre, die Zeit Magie zu ändern, um Wert zurückzugeben, anstatt zu drucken, oder das timeit Modul selbst zu verwenden. Patches willkommen.