为啥 %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 的递归方法的调用次数在程序运行之间会有所不同? [复制]

如何在每个测试都需要随机设置的情况下使用 timeit

根据 for 循环中的迭代次数向列表添加不同的值

为啥在循环内调用 publishProgress 并多次调用(没有循环)会显示不同的行为?

为啥 VS Code 无法在我的程序中导入 timeit 模块?

为啥 comb 在循环内的行为不同?