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
_は何をしますか?
繰り返し数を指定します。繰り返し数は平均を決定するために使用されます。例えば:
%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
of 3
、5
または7
(ほとんどの場合それは十分な大きさです)とn
をできるだけ高く選択します。ただし、高すぎないように、適切な時間で終了させたいと思います:-)
timeit -n 250 <statement>
ステートメントは3 * 250 = 750回実行されます(-r
のデフォルト値は3)です。
timeit -n 250 -r 4 <statement>
ステートメントは4 * 250 = 1000回実行されます
-r
-タイマーを繰り返す回数(上記の例では、タイマーが-n 250で呼び出されるたびに250の実行を意味します)