2016-12-27 6 views
4

Я не могу понять, как сохранить результат от клеточной магии - %%timeit? Я прочитал:Как сохранить результат из магии ячейки %% timeit?

  1. Can you capture the output of ipython's magic methods?
  2. Capture the result of an IPython magic function

и эти вопросы отвечает только о линии магии. В линейном режиме (%) это работает:

In[1]: res = %timeit -o np.linalg.inv(A) 

Но в режиме клеток (%%) не:

In[2]: res = %%timeit -o 
     A = np.mat('1 2 3; 7 4 9; 5 6 1') 
     np.linalg.inv(A) 

Он просто выполняет клетки, никакой магии. Это ошибка, или я делаю что-то неправильно?

+0

Я использую IPython 5.1.0 – godaygo

+1

Спасибо, что не только ссылаются на связанные вопросы, но и подытоживаем, как они актуальны. Вы были бы удивлены (или нет) тем, как многие люди не имеют это как встроенный рефлекс, когда у них возникает вопрос. –

ответ

5

Вы можете использовать _ переменные (сохраняют последний результат) после %%timeit -o ячейки и присвоить его какой-многоразовую переменный:

In[2]: %%timeit -o 
     A = np.mat('1 2 3; 7 4 9; 5 6 1') 
     np.linalg.inv(A) 
Out[2]: blabla 
     <TimeitResult : 1 loop, best of 3: 588 µs per loop> 

In[3]: res = _ 

In[4]: res 
Out[4]: <TimeitResult : 1 loop, best of 3: 588 µs per loop> 

Я не думаю, что это ошибка, потому что команды режима ячейки должна быть первой командой в этой ячейке, чтобы вы не могли поставить ничего (даже не res = ...) перед этой командой.

Однако вам все еще нужен -o, потому что в противном случае переменная _ содержит None.

+0

И что 'res' имеет несколько атрибутов, которые вы можете видеть с помощью' res. 'или' vars (res) '. – hpaulj