【问题标题】:IPython %timeit what is loop and iteration in the options?IPython %timeit 选项中的循环和迭代是什么?
【发布时间】:2017-09-05 00:22:28
【问题描述】:

我想知道IPython 中的%timeit 命令

来自docs

%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code

选项:

-n:循环执行给定语句的次数。如果没有给出这个值,则选择一个拟合值。

-r:重复循环迭代次数,取最好的结果。默认值:3

例如,如果我写:

%timeit -n 250 -r 2 [i+1 for i in range(5000)]

那么,-n 250 执行 [i+1 for i in range(5000)] 250 次?那-r 2是什么意思?

【问题讨论】:

  • 它运行了两次 250。
  • 为什么要跑两次 250 次?我不明白为什么提供这些选项背后的逻辑。
  • 什么不清楚?

标签: python ipython timeit


【解决方案1】:

它指定重复次数,重复次数用于确定平均值。例如:

%timeit -n 250 a = 2
# 61.9 ns ± 1.01 ns per loop (mean ± std. dev. of 7 runs, 250 loops each)

%timeit -n 250 -r 2 a = 2
# 62.6 ns ± 0 ns per loop (mean ± std. dev. of 2 runs, 250 loops each)

执行次数将为n * r,但统计数据基于repeats (r) 的数量,但每次重复的“循环”数取决于number (@987654327) @)。

基本上,您需要足够大的n,因此循环次数的最小值是准确“足够”以表示可能的最快执行时间,但您还需要足够大的r 以获得准确的“统计信息” “尽可能快的执行时间”测量值的可信度如何(尤其是在您怀疑可能发生某些缓存的情况下)。

对于肤浅的计时,您应该始终使用r357(在大多数情况下足够大)并选择尽可能高的n - 但不要太高,您可能希望它在合理的时间内完成:-)

【讨论】:

  • 我每隔几个月就会回到这个答案,但我仍然不知道r 的用途,这太模糊了。
  • @bwdm 我更详细地回答了类似的问题here。让我知道这是否不那么模糊。 :)
【解决方案2】:
timeit -n 250 <statement>

语句将被执行 3 * 250 = 750 次(-r 的默认值为 3)

timeit -n 250 -r 4 <statement>

语句将被执行 4 * 250 = 1000 次

-r - 计时器重复多少次(在上面的示例中,每次使用 -n 250 调用计时器,这意味着执行 250 次)

【讨论】:

    【解决方案3】:

    一种更具统计意义的解释方式是对某些统计数据(特别是其均值和标准差)的分布进行自举估计,在这种情况下:“r”可以看作样本数,“n”可以看作每个样本的大小。

    【讨论】:

    • 您是否暗示对样本(每个样本由 n 次运行组成)进行标准差估计会比仅对所有 (nr) 样本的标准差进行更准确的估计运行?否则,我不明白为什么要将结果分成 r 个样本,而不是仅仅基于所有 nr 运行的推断。在我看来,真正的原因是the resolution of the timer itself,但让我知道还有另一个统计原因。
    猜你喜欢
    • 2020-11-01
    • 2018-01-04
    • 1970-01-01
    • 2021-09-07
    • 2022-10-15
    • 2011-03-18
    • 1970-01-01
    • 2014-11-25
    • 2013-12-17
    相关资源
    最近更新 更多