Bli*_*ink 8 python random numpy
在编写脚本时,我发现了numpy.random.choice函数.我实现它是因为它比等效的if语句更清晰.但是,在运行脚本后,我意识到这是显著比if语句慢.
以下是MWE.第一种方法需要0.0秒,而第二种方法需要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))
Run Code Online (Sandbox Code Playgroud)
use*_*ica 17
你错了.矢量化操作,或numpy将不提供任何好处:
var = numpy.random.choice([-1, 0, 1], size=1000, p=[0.25, 0.5, 0.25])
Run Code Online (Sandbox Code Playgroud)
时间数据:
>>> timeit.timeit('''numpy.random.choice([-1, 0, 1],
... size=1000,
... p=[0.25, 0.5, 0.25])''',
... 'import numpy', number=10000)
2.380380242513752
>>> timeit.timeit('''
... var = []
... for i in xrange(1000):
... tmp = rand.rand()
... if tmp < 0.25:
... var.append(1)
... elif tmp < 0.5:
... var.append(-1)
... else:
... var.append(0)''',
... setup='import numpy.random as rand', number=10000)
5.673041396894519
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7316 次 |
| 最近记录: |