つまりなにしたの?
まだ
start = time.time() # 計測したい処理 e_time = time.time() - start print ("e_time:{0}".format(e_time) + "[s]")
で消耗してるの?ってことでずっと消耗してたのでJupyter(Ipython)らしい方法を使うようにした話。
Pythonでコードの一部の実行時間をはかる時のいつもの方法
Timeをインポートして現在時刻と処理開始時刻の差をとってた。
import time start = time.time() [x ** 2 for x in range(100000)] # 計測したい処理 e_time = time.time() - start print ("e_time:{0}".format(e_time) + "[s]")
Jupyter Notebookで使える%timeと%timeit
JupyterというかIPythonには%timeと%timeitがあってそれぞれ
- %time
%time 時間計測をしたい処理
と記述することで、その処理の実行時間を計測・表示してくれる。
- %timeit
%timeit 時間計測をしたい処理
と記述することで、その処理を自動的に何度か実行して時間を計測してくれる(ばらつきがあるときなどに使う。
%time l = [x ** 2 for x in range(100000)] %timeit l = [x ** 2 for x in range(100000)] CPU times: user 52.1 ms, sys: 3.71 ms, total: 55.9 ms Wall time: 60.7 ms 34.6 ms ± 1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
え、セルごとじゃないの?
1行の実行時間をはかるというのはJupyter Notebookでもやることはあるけど、
やっぱり知りたいのはセルの実行時間。構造化する前のコードとかが多いからなおさら。
安心してください、セルでも出来ますよ。
%%time l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] CPU times: user 232 ms, sys: 8.14 ms, total: 240 ms Wall time: 248 ms
%%timeit l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] l = [x ** 2 for x in range(100000)] 225 ms ± 17.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
表示されるのは%一つのときと同じだけど対象がセルになってる。
%%time,%%timeitはセルの最初に書かないとエラーが出るので注意
もっと早く調べて使えばよかった
実行例はこちら
github.com