ipython%timeIt选项中的循环和迭代



我想知道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,但统计量基于repeatsr)的数量,但是每个重复的" loops"数量是基于numbern)确定的。

基本上,您需要足够大的n,因此循环数量的最小数量是准确的"足够"以表示最快的执行时间,但是您还需要足够大的r,以获得准确的"统计信息",以"统计"有关"多么可信赖"。最快可能的执行时间"是"测量"(特别是如果您怀疑可能发生一些缓存)。

对于浅表时间,您应该始终使用357r(在大多数情况下,大多数情况很大),然后选择尽可能高的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"作为每个样品的大小。

最新更新