我想知道%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
是什么?
答案 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
,但统计数据基于repeats
(r
)的数量,但每次重复的“循环次数”是根据number
(n
)。
基本上你需要一个足够大的n
,所以循环次数的最小值足够“足以”代表最快的执行时间,但你还需要一个足够大的r
来获得准确的关于“最快可能的执行时间”测量值的可信度的“统计数据”(特别是如果您怀疑某些缓存可能正在发生)。
对于肤浅的时间安排,您应始终使用r
3
,5
或7
(在大多数情况下足够大)并选择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”可以看作样本数每个样本的大小。