コードの実行時間を計測します
Jupyter Notebook のマジックコマンドを活用してコードの実行時間を計測する方法について解説します。
%%time, %time コマンドで実行時間を計測する
コードセル全体の実行時間を計測するときには %%time コマンド などを活用します。
for 文を使って 1 から 106 までを足した場合の時間を計ってみましょう。
# 1+2+3+...+1000000 の実行時間を計測 %%time k = 0 for x in range(10**6): k += x print(k) # 499999500000 # Wall time: 312 ms
Wall time (プログラムの開始から終了までにかかった時間) が 312 ミリ秒であるという結果が出ました。ミリ秒は千分の1秒のことなので、およそ 0.3 秒かかっていることになります。
1 行のコードを計測するときには %time コマンド が使えます。今度は 1 から 106 までを足し合わせるコードを sum() を使って 1 行で記述し、その実行時間を計測してみます。
# 1+2+3+...+1000000 の実行時間を計測 %time sum(range(10**6)) # Wall time: 125 ms
結果は 125 ミリ秒となりました。
for 文を用いたコードに比べて、半分以下の時間で処理していることがわかります。
%%timeit, %timeitで実行時間を計測する
同じ内容のコードであっても処理時間はその時々で微妙に異なります。そこで、より信頼性の高い計測結果を得るには、何度か試行してその平均値やばらつきを知る必要があります。そのために用いられるマジックコマンドが %%timeit や %timeit です。for 文で 1 から 106 までを足し合わせるコードを %%timeit コマンドで計測してみます。
%%timeit k = 0 for x in range(10**6): k += x # 159 ms ± 84.8 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
10 回ループを 7 回試行して、1 ループあたりの平均計測時間が 159 ミリ秒、標準偏差(平均からのばらつき)が± 84.8 マイクロ秒という結果が表示されました。mean は「平均」を意味します。dev は「標準偏差 (standard deviation)」の略です。run が試行回数で、loops はループ回数です。
コード 1 行の平均実行時間を計測するときは %timeit コマンドを使います。sum 関数を使って 1 から 106 までを足した場合の平均実行時間を計測してみます。
# 1+2+3+...+1000000 の実行時間を計測 %timeit sum(range(10**6)) # 107 ms ± 249 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit や %timeit コマンドでは、-r で試行回数を、-n でループ回数を指定することもできます。
#指定した試行回数とループ回数での平均と標準偏差 %timeit -r 3 -n 5 sum(range(10**6)) # 113 ms ± 2.82 ms per loop (mean ± std. dev. of 3 runs, 5 loops each)
指定した通り、3 runs, 5 loops each と表示されています。
コメント