計測方法の解説
Jupyter Notebookで実行時間を計測するにはマジックコマンドを使う。
マジックコマンドには色々なものがあるが、%time
, %%time
, %timeit
, %%timeit
を使うことで時間計測ができる。
使い方を紹介する前に time
とtimeit
の違い、 %
と %%
の違いを説明する。
timeとtimeitの違い
time
と timeit
はどちらも実行時間を計測するためのマジックコマンドだけど若干動作が違う。
time
は 一度だけ実行し時間計測をする。timeit
は 複数回実行し時間計測をする。平均と標準偏差を出してくれる。
プログラム中で実行時間を測りたいだけなら time
でOKtimeit
を使うと何回も実行されるので時間がかかる。
正確な実行時間が欲しければ timeit
の方が良いかもしれない。
%と%%の違い
%
がついているものは line modeで1行に対してマジックコマンドを適用し、%%
がついているものは cell mode でせるに対してマジックコマンドを適用する。
具体的にどのような動作をするかはドキュメントを見てほしいが、時間計測に関しては%time
が1行のプログラムの時間を計測し、%%time
はセルの時間を計測することになる。
%timeit
, %%timeit
も同様。
実行時間を計測してみる
1行のプログラムだけを計測 ( %time or %timeit)
1行だけの時間を測る場合はこのように%time 計測対象プログラム
or%timeit 計測対象プログラム
として計測する。
def fibonacci(x):
if x==1 or x==2:
return 1
else:
return fibonacci(x-1) + fibonacci(x-2)
%time fibonacci(35)
# CPU times: user 2.99 s, sys: 3 ms, total: 2.99 s
# Wall time: 3.01 s
%timeit fibonacci(35)
# 2.33 s ± 113 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
# 1 loop, best of 5: 2.96 s per loop (Google colabで実行)
セルを計測 ( %%time or %%timeit)
セルの時間を測る場合はこのようにする。
%%time
import time
time.sleep(1)
time.sleep(2)
time.sleep(3)
# CPU times: user 20.6 ms, sys: 3.03 ms, total: 23.6 ms
# Wall time: 6 s
%%timeit
import time
time.sleep(1)
time.sleep(2)
time.sleep(3)
# 6.01 s ± 3.97 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
# 1 loop, best of 5: 6.01 s per loop(Google colabで実行)
ちなみにこの時のマジックコマンドはセルの先頭に描く必要があるので注意!!
import time
%%time
# SyntaxError: invalid syntax
time.sleep(1)
time.sleep(2)
time.sleep(3)
お気づきの方もいるかもしれませんが、ローカルのJupyter Notebookで実行した時と Google Colabで実行した時で出力内容が違いました。謎なのでご存じの方がいれば教えていただきたいです。
%timeit , %%timeit の繰り返し回数の変更
%timeit
や%%timeit
の繰り返し回数は
%%timeit -n3 -r3
import time
time.sleep(1)
time.sleep(2)
time.sleep(3)
# 6.01 s ± 789 µs per loop (mean ± std. dev. of 3 runs, 3 loops each)
のように -n
や -r
を使うことで変更ができます。
timeitの繰り返しはまだ深く理解していないのでまた追記するかもしれません。
コメント