Можете ли вы зафиксировать вывод магических методов ipython? (время)

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

До сих пор я пробовал:

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

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

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

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

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


person Gus    schedule 26.06.2013    source источник
comment
возможный дубликат Захват результата магической функции IPython   -  person Iguananaut    schedule 27.08.2014


Ответы (2)


Этот повторяющийся вопрос Захват результата магической функции IPython имеет ответ, демонстрирующий, что с тех пор это было реализовано.

Вызов магии %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
person Iguananaut    schedule 27.08.2014
comment
Кажется, это характерно только для некоторых магических команд (может быть, только %timeit?). Это не работает с %%timeit. Использование result = %%timeit -o в качестве строки ячейки возвращает None. - person Steven C. Howell; 05.05.2017
comment
@StevenC.Howell Вы можете использовать %%timeit -o без назначения. Он вернет объект TimeitResult, и благодаря захвату вывода IPython вы можете получить результат, обратившись к _. - person lovetl2002; 24.08.2017
comment
Из документов для timeit : в режиме ячейки (%%timeit) оператор в первой строке используется как код установки (выполняется, но не синхронизируется), а тело ячейки синхронизируется. Тело ячейки имеет доступ к любым переменным, созданным в коде установки. github.com/ipython/ipython/blob/ - person Davos; 22.07.2019
comment
Кроме того, если вы добавите -q, вы не получите нормальный вывод. - person coderforlife; 17.07.2020

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

Нет.

На dev есть т. е. %%capture клеточная магия. Другим способом было бы изменить магию timeit, чтобы возвращать значение вместо печати, или использовать сам модуль timeit. Патчи приветствуются.

person Matt    schedule 26.06.2013