処理速度の速いプログラムが求められる場合、プログラムの処理時間を見ながら試行錯誤していくことになると思います。この時に使う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における、処理時間計測方法をまとめました。いろいろなやり方があると思いますので、他にありましたら、教えていただけると嬉しいです。
コメント