スクリプトを書いているときに、numpy.random.choice 関数を発見しました。同等の if ステートメントよりもはるかにクリーンだったので、実装しました。ただし、スクリプトを実行した後、if ステートメントよりも大幅に遅いことに気付きました。
以下は 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))