少し巧妙な実験で、私はPythonの組み込み関数のいくつかをnumpyのものと比較したいと考えました。私はこれらのタイミングを開始したとき、私は奇妙な何かを発見した。Pythonのtimeitと非常に異なる2つの非常に一貫性のある結果
私は次のように書いた:
import timeit
timeit.timeit('import math; math.e**2', number=1000000)
私は非常に統計学的に有意な方法で、ほぼランダム交互に二つの異なる結果になるだろう。
これは2秒と0.5秒の間で交互に切り替わります。
私は混乱しているので、何が起こっていたのか理解するためにいくつかの実験を行いましたが、私はもっと混乱しました。だから私は次の実験を試みた:
[timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100)]
これは完全に0.5の数字につながった。
test = (timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100))
[item for item in test]
2.0数の完全なリストにつながった:私は、発電機でこれを播種みました。 alecxeの提案に
は私がに私はtimeitステートメントを変更:同様に約0.1〜0.4秒の間で交互にtimeit.timeit('math.e**2', 'import math', number=1000000)
が、私は発電機と、リストの内包表記を比較した実験が、今回の結果をreranときフリップされた。つまり、ジェネレータの表現は定期的に0.1秒の数字が出てきたのに対して、リストの理解は0.4秒の完全なリストを返しました。
ダイレクトコンソール出力:
>>> test = (timeit.timeit('math.e**2', 'import math', number=1000000) for i in xrange(100))
>>> test.next()
0.15114784240722656
>>> timeit.timeit('math.e**2', 'import math', number=1000000)
0.44176197052001953
>>>
編集:私はDWMを実行しているのUbuntu 12.04を使用している、と私は、これらの結果xtermの中やgnome-terminalの両方を見てきました。私はPythonを使用しています。2.7.3
ここで何が起こっているのか分かりませんか?これは私にとって本当に奇妙なようです。
import文を次のように2番目の引数に移動するとどうなりますか? 'timeit.timeit '' math.e ** 2 '、' import math '、number = 1000000) '? – alecxe
@alecxe提案していただきありがとうございます。さらに奇妙な結果。今投稿する。 –
私はそれを試してみるのと同じようなものは見えません。 – user2357112