在编写脚本时,我发现了numpy.random.choice函数。我实现它是因为它比等价的if语句干净得多。但是,在运行脚本之后,我意识到它比if语句慢得多。
以下是MWE。第一种方法需要0.0秒,而第二种方法需要7.2秒。如果放大i循环,您将看到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))
我花了很长时间才发现,由于通过
np.random.choice
进行随机密钥采样,我的数据生成器非常慢。如果非均匀分布是不需要的,那么这里是我找到的可行解决方案:
替换
与
大大提高了我的速度60倍
我怀疑
np.random.choice
的普遍性正在减慢它的速度,对于小样本比大样本更是如此。if
版本的粗略矢量化是:正在运行
ipython
我得到:因此对于
1000
大小,choice
慢3-4倍,但是对于较大的载体,差异开始消失。你用错了。使操作矢量化,否则numpy不会提供任何好处:
计时数据:
相关问题 更多 >
编程相关推荐