【问题标题】:Measure runtime of a Jupyter Notebook code cell测量 Jupyter Notebook 代码单元的运行时间
【发布时间】:2017-09-04 13:57:18
【问题描述】:

似乎在 Spyder(IPython3 内核)中,可以通过在代码单元顶部运行 %%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,因为它后面没有任何内容在同一行,它实际上测量什么都没有。)

【问题讨论】:

  • %%time%%timeit 是有效的 IPython 单元格魔法,它们都应该作为笔记本单元格中的第一行。你使用的是什么版本的 Jupyter 和 IPython?
  • @cco Jupyter 4.3.1 和 IPython 4.2.1,应该是最新的。
  • 请显示单元格和您尝试使用%%time 时遇到的错误 - 如果%time 有效,那么%%time 也应该有效。
  • @cco 我知道哪里出了问题。我认为 cmets 不算数,所以我将命令附加到标题命令下方。

标签: python time ipython jupyter-notebook spyder


【解决方案1】:

请将%%time 放在单元格的最开头,甚至在任何 cmets 之前。这对我有用。

【讨论】:

    【解决方案2】:

    这取决于你想如何使用时间信息...

    如果您只是想根据自己的知识了解一个单元执行多长时间,那么 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
    

    显然,这不像使用细胞魔法那么简洁,但应该可以完成工作。

    至于如何/是否可以使用细胞魔法实现后者,我不知道。

    【讨论】:

    • 感谢您的建议。是的,我可以在每个单元格的开头使用 %%timeit 命令来实现后者。
    【解决方案3】:

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

    自动单元执行时间

    打开cmd一个一个运行命令

    1. pip install jupyter_contrib_nbextensions
    2. jupyter contrib nbextension install --user
    3. jupyter nbextension 启用拼写检查器/main
    4. jupyter nbextension 启用代码折叠/main

    【讨论】:

      【解决方案4】:

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

      将 %%time 放在单元格的最开始,甚至在任何 cmets 之前。

      第二个选项是使用:timeit 库,我发现它的文本很重(个人意见)。

      【讨论】:

        【解决方案5】:

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

        然后运行 ​​Jupyter Notebook 并使用浏览器进入配置器(通常是 http://localhost:8888/nbextensions)并手动启用“执行时间”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-20
          • 2020-09-05
          • 2018-01-08
          • 1970-01-01
          • 1970-01-01
          • 2021-03-27
          • 1970-01-01
          相关资源
          最近更新 更多