IPython%timeit选项中的循环和迭代是什么?

时间:2017-09-05 00:22:29

标签: python ipython timeit

我想知道%timeit

中的IPython命令

来自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是什么?

3 个答案:

答案 0 :(得分:6)

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

%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,但统计数据基于repeatsr)的数量,但每次重复的“循环次数”是根据numbern)。

基本上你需要一个足够大的n,所以循环次数的最小值足够“足以”代表最快的执行时间,但你还需要一个足够大的r来获得准确的关于“最快可能的执行时间”测量值的可信度的“统计数据”(特别是如果您怀疑某些缓存可能正在发生)。

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

答案 1 :(得分:1)

timeit -n 250 <statement>

该声明将执行3 * 250 = 750次(-r默认值为3)

timeit -n 250 -r 4 <statement>

该声明将执行4 * 250 = 1000次

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

答案 2 :(得分:0)

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