web-dev-qa-db-ja.com

IPython%timeitオプションのループと反復とは何ですか?

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_は何をしますか?

14
bner341

繰り返し数を指定します。繰り返し数は平均を決定するために使用されます。例えば:

%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 of 35または7(ほとんどの場合それは十分な大きさです)とnをできるだけ高く選択します。ただし、高すぎないように、適切な時間で終了させたいと思います:-)

12
MSeifert
timeit -n 250 <statement>

ステートメントは3 * 250 = 750回実行されます(-rのデフォルト値は3)です。

timeit -n 250 -r 4 <statement>

ステートメントは4 * 250 = 1000回実行されます

-r-タイマーを繰り返す回数(上記の例では、タイマーが-n 250で呼び出されるたびに250の実行を意味します)

6
alfasin