Python で実装した処理のパフォーマンスを計測するときに,たまに timeit
を使っている.timeit
は処理を繰り返し実行することにより,精緻な計測結果を把握できる.今までは timeit
を import
して直接実行していたけど,よく調べてみると,Jupyter Notebook (IPython) で「マジックコマンド」として %%timeit
と書けることを最近知った.import
も必要なく使えて便利だった!
%%time
を使う
実行回数は「ループ数」と「繰り返し数」から決まる.%%timeit
にオプションを指定せず実行すると「ループ数」は適切な精度が得られるように自動的に決まる仕組みになっている.なお「繰り返し数」はデフォルト 7
となる.Jupyter Notebook で簡単なサンプルコードを実装し,セルの頭に %%timeit
と書いて実行すると,以下のようになる.mean ± std
と書いてあるため「平均実行時間」と「標準偏差」だとわかる.なお「ループ数」は 1000000
になっていた.
%%timeit sum(range(100)) 1.42 µs ± 48.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%time -n
を使う
%%timeit
にオプション -n
を指定すると「ループ数」を固定できる.今回は 10
に固定して実行した.
%%timeit -n 10 sum(range(100)) 1.25 µs ± 30 ns per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%time -n -r
を使う
%%timeit
にオプション -r
を指定すると「繰り返し数」を固定できる.今回は 2
に固定して実行した.
%%timeit -n 10 -r 2 sum(range(100)) 1.28 µs ± 66.9 ns per loop (mean ± std. dev. of 2 runs, 10 loops each)
Jupyter Notebook と VS Code
以下の記事に書いた通り,最近は Jupyter Notebook を実装するときに Visual Studio Code (VS Code) を使う機会が増えている.
今回の %%timeit
の検証も VS Code を使っている.
まとめ
Jupyter Notebook でパフォーマンスを計測するときは「マジックコマンド」として %%timeit
を使うと便利だった.オプションにより「ループ数」と「繰り返し数」を固定できるけど,デフォルトで適切な精度が得られるように実行されるため,あまり気にしなくて良さそうに思う.