『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

【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】ディレクトリの操作

コメント