[Jupyter Notebook] 実行時間の計測

[Jupyter Notebook] 実行時間の計測

コードの実行時間を計測します

 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 と表示されています。

 ≫ Jupyter Notebook でディレクトリを操作します
 ≫ [Amazon書籍] PythonユーザのためのJupyter実践入門