2013-06-26 10 views
15

Chcę uchwycić i wykreślić wyniki z 5 lub więcej połączeń timeit z logarytmicznie rosnącymi rozmiarami N, aby pokazać, jak skala methodX() z wejściem.Czy możesz uchwycić wyjście magicznych metod ipython? (timeit)

Do tej pory próbowałem:

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

To nie działa ...

nie mogę znaleźć informacji w docs albo. Czuję, że powinieneś być w stanie przynajmniej przechwycić napis, który jest drukowany. Następnie mogę przeanalizować go, aby wyodrębnić moje informacje.

Czy ktoś to zrobił lub próbował?

PS: to jest w notatniku do ipythona, jeśli tworzy różnicę.

+0

możliwe duplikat [Zapisuje wyniki w funkcji ipython] magicznym (http://stackoverflow.com/questions/25289437/capture-the-result-of-an-ipython-magic-function) – Iguananaut

Odpowiedz

17

To zduplikowane pytanie Capture the result of an IPython magic function ma answer wykazujące, że zostało to zaimplementowane.

Wywołanie %timeit Magic z opcją jak -o:

%timeit -o <statement> 

zwraca TimeitResult przedmiot, który jest prosty obiekt ze wszystkimi informacjami na temat przebiegu %timeit jako atrybuty. Np

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

Wydaje się, że dotyczy to tylko niektórych poleceń magicznych (może po prostu '% timeit'?). Nie działa z '%% timeit'. Użycie 'result = %% timeit -o' jako linii komórki zwraca' None'. –

+2

@ StevenC.Howell Możesz użyć '%% timeit -o' bez przypisania. Zwróci obiekt 'TimeitResult', a dzięki wychwytowi wyjściowemu IPythona możesz odzyskać wynik, uzyskując dostęp do' _'. – user2923419

0

PS: to jest w notatniku do ipythona, jeśli tworzy różnicę.

Nie, nie ma.

Na dev znajduje się magia komórkowa %%capture. Innym sposobem jest zmodyfikowanie magii timeit w celu zwrócenia wartości zamiast drukowania lub skorzystanie z samego modułu timeit. Patche mile widziane.

Powiązane problemy