スクリプトを書いているうちにnumpy.random.choice関数が見つかりました。同等のif文よりもはるかにきれいだったので実装しました。しかし、スクリプトを実行した後、私はそれがであることに気づいた。はif文よりも遅い。random.choiceが遅いのはなぜですか?
以下はMWEです。最初のメソッドは0.0秒かかりますが、2番目のメソッドは7.2秒かかります。 iループをスケールアップすると、random.choiceの速度が遅くなるのがわかります。
誰かがrandom.choiceが非常に遅いのはなぜですか?
import numpy as np
import numpy.random as rand
import time as tm
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
tmp = rand.rand()
if tmp < 0.25:
var = 1
elif tmp < 0.5:
var = -1
print('Time: %.1f s' %(tm.time() - tStart))
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
var = rand.choice([-1, 0, 1], p = [0.25, 0.5, 0.25])
print('Time: %.1f s' %(tm.time() - tStart))
これは実際に公正な比較ではありません。毎回numpyはpリストの累積合計を新しいベクトルに入れ、それを反復しなければなりません。 3つの変数しかないことを知って事実上前処理をしており、第1と第3の合計は.5です。それを超えると、numpyはベクトル化された演算に最適化されています.1回の簡単な演算を何千回も実行するのではなく、 –
また、 'time'ではなく、' timeit'を単独で使用してください。 – Marcin