2013-06-26 4 views
15

Я хочу захватить и построить результаты с 5 или около того timeit звонки с логарифмически увеличивающимися размерами N, чтобы показать, как methodX() шкалы с вводом.Можете ли вы захватить вывод магических методов ipython? (timeit)

До сих пор я пытался:

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

Это не работает ...

Не можете найти информацию в документации либо. Я чувствую, что вы должны, по крайней мере, перехватить строку, которая напечатана. После этого я могу разобрать его, чтобы извлечь мою информацию.

Кто-нибудь это сделал или пробовал?

PS: это в ноутбуке ipython, если это делает diff.

+0

возможно дубликат [Захват результат волшебной функции IPython] (http://stackoverflow.com/questions/25289437/capture-the-result-of-an-ipython-magic-function) – Iguananaut

ответ

17

Этот дублированный вопрос Capture the result of an IPython magic function имеет answer, демонстрирующий, что с тех пор он был реализован.

Вызов %timeit магии с -o опции, как:

%timeit -o <statement> 

возвращает TimeitResult объекта, который является простым объектом со всей информацией о %timeit перспективы в качестве атрибутов. Например:

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

Это похоже на некоторые магические команды (может быть, просто '% timeit'?). Он не работает с '%% timeit'. Использование 'result = %% timeit -o', поскольку строка ячейки возвращает' None'. –

+2

@ StevenC.Howell Вы можете использовать '%% timeit -o' без назначения. Он вернет объект «TimeitResult», и благодаря выходному захвату IPython вы можете получить результат, обратившись к '_'. – user2923419

0

PS: это в ноутбуке ipython, если это делает разницу.

Нет, это не так.

На dev есть te %%capture cell magic. Другой способ - изменить магию timeit для возврата значения вместо печати или использовать сам модуль timeit. Патчи приветствовались.