似乎在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
因为在同一行中没有任何内容它实际上没有测量任何东西。)
答案 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一一运行命令
答案 2 :(得分:1)
请将%% time放在单元格的开头,甚至在未发表任何评论之前。这对我有用。
答案 3 :(得分:1)
答案 4 :(得分:0)
除了Jai Mahesh回答:在这4个命令之后,在我的Linux Mint系统中,我需要手动启用执行时间以查看测得的执行时间。为此,我安装了配置器: https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator
然后运行Jupyter Notebook,并使用浏览器进入配置器(通常这将转到http:// localhost:8888 / nbextensions)并手动启用“执行时间”。