IPython の timeit で実行時間計測

Python で関数やらモジュールやらの実行時間を計りたいときに使うっぽい、IPython の timeit ってコマンドがめっちゃ便利だったのでメモ。

使い方

%timeit って書いて計測したい処理を書くだけ。
例えばこんな感じ。

In [1]: l = range(100000)

In [2]: %timeit [i for i in l]
100 loops, best of 3: 8.28 ms per loop

たぶん % つけずに timeit だけでもいける。

色々オプションがあるらしい。

-n
ループ回数指定。指定無しだと適当な回数を割り当てられる。
-r
-nで指定したループを何回繰り返すか。デフォルト3回。
-t
time.time 使って計測。Unix だとデフォルトこっち(?)。
-c
time.clock 使って計測。Windows だとデフォルトこっち(?)。
-p<P>
時間の表示桁数。デフォルト3桁。


それをふまえて試しに実験。

In [3]: %timeit -n200 -r5 -p5 [i for i in l]
200 loops, best of 5: 8.3864 ms per loop

In [4]: %timeit -n200 -r5 -p5 [j for i, j in enumerate(l)]
200 loops, best of 5: 15.171 ms per loop

おお。ちゃんとできとる。
-n をつけないとループ数が適当に決められちゃうので実行時間を比較するときはこれ必須かな。

若干気になる

In [5]: %timeit -n1000 [i for i in l]
1000 loops, best of 3: 8.48 ms per loop

ループ数が 100 んときも 1000 のときも実行時間にほとんど差が出んかっただけど、これってこんなもんなんかな? Python 的にはループ多少増えたところで関係ねぇぜってこと?もしかして常識か?!うーん勉強不足でございます。。

12/04 追記

ってこれ、よく見たら普通に1ループあたりのってことだがな!そりゃ変わらんの当たり前だんな。うわ恥ずかし。。た、たぶん、書いたのが深夜だったからですよ。。寝ぼけてたんですよ。きっと。。