我想知道IPython
%timeit
命令来自文档:
%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
?
它指定重复的数量,使用重复次数来确定平均值。例如:
%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
)的数量,但是每个重复的" loops"数量是基于number
(n
)确定的。
基本上,您需要足够大的n
,因此循环数量的最小数量是准确的"足够"以表示最快的执行时间,但是您还需要足够大的r
,以获得准确的"统计信息",以"统计"有关"多么可信赖"。最快可能的执行时间"是"测量"(特别是如果您怀疑可能发生一些缓存)。
对于浅表时间,您应该始终使用3
,5
或7
的r
(在大多数情况下,大多数情况很大),然后选择尽可能高的n
- 但不太高,您可能希望它在合理的时间内完成: - )
timeit -n 250 <statement>
该语句将被执行3 * 250 = 750次(-r
的默认值为3)
timeit -n 250 -r 4 <statement>
该语句将被执行4 * 250 = 1000次
-r
-重复计时器多少次(在上面的示例中,每次使用-n 250调用计时器,这意味着250个执行)
在这种情况下,解释的一种更统计的解释方法是对某些统计数据的分布(特别是其平均值和标准偏差)的估计:" R"可以看作是样品的数量和" n"作为每个样品的大小。