スポンサーリンク

プログラムの処理時間を計測する|Python、JupyterLab、Google Colab【実行時間計測】

Python

 処理速度の速いプログラムが求められる場合、プログラムの処理時間を見ながら試行錯誤していくことになると思います。この時に使うPythonでのプログラムの処理時間計測について、まとめていきます。

time モジュール

Pythonの標準ライブラリである「time」モジュールを使用することで、処理時間の計算ができます。今回は、処理時間計測対象の関数として、「sample_function」を定義し、処理時間を計測しました。

# timeモジュールのインポート
import time

# 処理時間計測対象の関数
def sample_function(n):
    for i in range(n):
        i += i
    return i

start = time.time()           # 測定開始
sample_function(100000)
elapsed = time.time() - start # 測定終了

print(f"{elapsed * 1000:.1f} ms")  
# 46.3 ms

time.time関数で、1970年1月1日0時0分0秒からの経過時間を取得することができます。このため、差分を取ることで、対象関数の処理時間を算出することができます。

JupyterLab、Jupyter Notebook、Google Colabでのマジックコマンド

JupyterLab、Jupyter Notebook、Google Colabでは、計測用のマジックコマンドが用意されており、そちらを使うと簡単に処理時間を計測することができます。

行の処理時間計測

%time

行の処理時間を計測するには、コード例のように、関数の前に%timeをつけるだけで計測することができます。Wall timeが全体の実行時間になります。

%time  sample_function(100000)
# CPU times: user 18.7 ms, sys: 0 ns, total: 18.7 ms
# Wall time: 19.6 ms

%timeit

%timeは、処理1回の計測ですが、%%timeは、複数回実行し、その平均値や標準偏差を算出してくれるため、より精度が高く処理時間の計測ができます。

%timeit  sample_function(100000)
# 6.52 ms ± 159 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

こちらの結果は、100回のループ*7回の平均値と標準偏差が表示されています。

理由は分かりませんが、Google Colabでは計測の仕方が違うようで、以下のように100回ループしたうちのトップ5の平均値が表示されるようです。

# 100 loops, best of 5: 4.72 ms per loop

セルの処理時間計測

セルの処理時間計測は、行のコマンドに%を一つ追加するだけでできます。

%%time

%%time 
sample_function(100000)
sample_function(100000)
# CPU times: user 26.8 ms, sys: 0 ns, total: 26.8 ms
# Wall time: 33.7 ms

%%timeit

%%timeit  
sample_function(100000)
sample_function(100000)
# 14.5 ms ± 1.79 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

こちらも、Google Colabでは計測の仕方が違うようで、以下のように100回ループしたうちのトップ5の平均値が表示されるようです。

# 100 loops, best of 5: 13.2 ms per loop

ざっくりとPythonにおける、処理時間計測方法をまとめました。いろいろなやり方があると思いますので、他にありましたら、教えていただけると嬉しいです。

関連記事、参考記事

コメント