为啥 %timeit 循环的次数不同?
Posted
技术标签:
【中文标题】为啥 %timeit 循环的次数不同?【英文标题】:Why does %timeit loop different number of times?为什么 %timeit 循环的次数不同? 【发布时间】:2018-01-04 14:35:05 【问题描述】:在 Jupter Notebook 上,我试图比较两种方法在查找具有最大值的索引时所用的时间。
在图像中,第一个函数使用了 1000 个循环,第二个函数使用了 10000 个循环,这是由于方法本身导致的循环增加还是 Jupyter 只是添加了更多循环以获得更准确的每个循环时间,即使第二个函数可能只拿了1000,是这样吗?
【问题讨论】:
【参考方案1】:使用-r
限制运行次数:
import time
%timeit -r1 time.sleep(2)
# 2 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r4 time.sleep(2)
# 2 s ± 800 µs per loop (mean ± std. dev. of 4 runs, 1 loop each)
%timeit time.sleep(2)
# 2 s ± 46.5 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
【讨论】:
您可以在-r
和运行次数之间放置一个空格,以便与-n
保持一致【参考方案2】:
%timeit
库将根据脚本执行所需的时间来限制运行次数。
可以使用 -n 设置运行次数。示例:
%timeit -n 5000
df = pd.DataFrame('High':[1,4,8,4,0])
5000 loops, best of 3: 592 µs per loop
【讨论】:
感谢您的解释.. 我只是想在这里为其他人提及..ipython
文档中有错字.. 尚未更正。 ipython
的最新版本默认为 7
循环。如果未提及 -r
。
我只想运行一次 timeit,但 %%timeit -n 1 对我不起作用,但 %%time 对我起作用。
-r和-n有什么区别?
@haneulkim 正如文档指出的那样:n
- 执行“语句”多少次,r
- 重复计时器多少次(默认为 5)。【参考方案3】:
它有一个内置选项-n: " 选项:-n:循环执行给定语句的次数。如果没有给出这个值,则选择一个合适的值。"docs
因此,如果未指定,它会自行选择循环数。
【讨论】:
这似乎不是真的..如果你使用-n1
,它实际上并没有执行一次..而是7次..有什么原因吗?
@alpha_989 你需要%%timeit -n 1 -r 1
,循环和重复单独配置,重复默认为7。以上是关于为啥 %timeit 循环的次数不同?的主要内容,如果未能解决你的问题,请参考以下文章
为啥导致 ***Error 的递归方法的调用次数在程序运行之间会有所不同? [复制]
为啥在循环内调用 publishProgress 并多次调用(没有循环)会显示不同的行为?