测量Jupyter Notebook代码单元的运行时

时间:2017-04-09 14:06:27

标签: python time ipython jupyter-notebook spyder

似乎在Spyder(IPython3 Kernel)中,可以通过在代码单元顶部运行%%time%%timeit命令轻松计时代码单元:

#%%
%%time # or %%timeit which measures average runtime from multiple runs
....

#%% (the previous cell ends and the next begins)

运行上面的代码可以获得由#%%对定义的单元的运行时间。这就是Spyder的工作方式,但在Jupyter Notebook环境中并不起作用。

在Jupyter中,代码单元格不是由#%%分隔符定义的,而是通过单击菜单栏中的按钮创建的。就我的尝试而言,命令%%time%%timeit都会引发编译错误。似乎Jupyter无法识别它们,但它很奇怪,因为我的Jupyter实际上使用了与Spyder相同的IPython内核。在Jupyter中有效的一件事是%time%timeit命令,但它们只能测量单行代码的运行时间,即必须像

那样表达。
%time blah blah

事实证明,我甚至无法衡量一个由多行组成的for循环。所以这种方法对我来说并不合适。是否有任何方法可以使用Jupyter中的魔术命令%time(it)等评估单元运行时?

(PS:如果在Spyder中我在单元格的顶部附加%time命令,则会给出Wall time: 0 ns因为在同一行中没有任何内容它实际上没有测量任何东西。)

5 个答案:

答案 0 :(得分:7)

这取决于您希望如何使用时间信息......

如果你只是想知道一个单元为你自己的知识执行多长时间,那么ExecuteTime笔记本扩展(https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/7672d429957aaefe9f2e71b15e3b78ebb9ba96d1/src/jupyter_contrib_nbextensions/nbextensions/execute_time)是一个不错的解决方案,因为它自动为所有代码单元提供时间信息,意味着减少代码维护,因为您不必在整个地方添加时序代码。它还会写入最后执行的日期戳,如果您将笔记本用作科学日志,则会很有用。

但是,如果要以编程方式使用时间信息,则需要添加代码以将时间信息捕获到变量中。根据这个答案(Get time of execution of a block of code in Python 2.7),您可以使用timeit模块:

import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time

显然,这不像使用细胞魔法那样整洁,但应该完成工作。

关于如何使用细胞魔法来实现后者,我不知道。

答案 1 :(得分:4)

为避免在每个单元格中再次使用%%

自动细胞排泄时间

open cmd一一运行命令

  1. pip安装jupyter_contrib_nbextensions
  2. jupyter贡献nbextension install --user
  3. jupyter nbextension启用拼写检查器/ main
  4. jupyter nbextension启用代码折叠/主要

答案 2 :(得分:1)

请将%% time放在单元格的开头,甚至在未发表任何评论之前。这对我有用。

答案 3 :(得分:1)

就像Rizwan的回答一样,我发现这是最简单的方法:

在单元格的最开始处甚至是在发表任何评论之前都要先输入%% time。

第二种选择是使用:timeit库,我发现它的文字繁重(个人观点)。

enter image description here

答案 4 :(得分:0)

除了Jai Mahesh回答:在这4个命令之后,在我的Linux Mint系统中,我需要手动启用执行时间以查看测得的执行时间。为此,我安装了配置器: https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator

然后运行Jupyter Notebook,并使用浏览器进入配置器(通常这将转到http:// localhost:8888 / nbextensions)并手动启用“执行时间”。 View in the extension configurator with enabled extension 'Execute Time'