在 ipython 笔记本中测量单元执行时间的简单方法

新手上路,请多包涵

除了单元格的原始输出之外,我还想获得在单元格执行上花费的时间。

为此,我尝试了 %%timeit -r1 -n1 但它没有公开单元格中定义的变量。

%%time 适用于仅包含 1 条语句的单元格。

 In[1]: %%time
       1
CPU times: user 4 µs, sys: 0 ns, total: 4 µs
Wall time: 5.96 µs
Out[1]: 1

In[2]: %%time
       # Notice there is no out result in this case.
       x = 1
       x
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 5.96 µs

最好的方法是什么?

更新

在 Nbextension 中使用 Execute Time 已经有一段时间了。太好了。

更新 2021-03

到目前为止, 是正确的答案。从本质上讲, %%time%%timeit 现在都可以正常工作。

原文由 colinfang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 775
2 个回答

这只是旧版本中的一个问题。

您现在需要做的就是将 %%time 放在单元格的顶部。

在此处输入图像描述

%%time 测量运行某个东西需要多长时间。报告长时间运行的操作比进行低级优化更好。

%%timeit 是一个基准测试工具,它反复运行语句以提供某些语句的 平均 运行时间以及标准偏差。由于语句重复执行的方式,在 %%timeit 单元格中创建的变量在其他单元格中不可用。

在此处输入图像描述

%%timeit 使用python timeit 模块。那个文档说,

它避免了一些用于测量执行时间的常见陷阱。另请参阅 Tim Peters 对 O’Reilly 出版的 Python Cookbook 中“算法”一章的介绍。

希望 该模块仍然相关,因为 它引用的参考 描述了诸如(1)Windows 98 的解决方法仅更新 time.time() 每秒 18.2 次,以及(2)将所有语句干扰到一个line 以避免增加行号计数器的字节码开销。


当前评分最高的答案 以及其他一些过时的答案(应该删除,因为它们现在 _具有高度误导性_) 确实 有有用的评论表明这些答案不正确:

原文由 andrewdotn 发布,翻译遵循 CC BY-SA 4.0 许可协议

我发现解决这个问题的唯一方法是使用 print 执行最后一条语句。

不要忘记 cell magic 以 %% 开头,line magic 以 % 开头。

 %%time
clf = tree.DecisionTreeRegressor().fit(X_train, y_train)
res = clf.predict(X_test)
print(res)

请注意,在单元格内执行的任何更改都不会在下一个单元格中考虑,这在有管道时是违反直觉的: 一个例子

原文由 Salvador Dali 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题