我需要从均匀分布中生成大量(1百万)个随机数。我做了一些实验,使用
在[0-999]
上通过均匀分布生成60K随机数
scipy.stats.randint(0,1000).rvs(60000)
花了大约0.6秒。然后我尝试使用boost库
boost::random::uniform_int_distribution
花费了大约0.25秒。所以我的问题是 - 有没有更好的方法来做我想用python(库)做的事情?任何建议都非常感谢。感谢。
答案 0 :(得分:3)
使用numpy.random.randint
:
numpy.random.randint(low=1, high=1001, size=60000)
在我的试验中,它的运行速度比scipy.stats.randint
快约300倍,scipy.stats.randint(0,1000).rvs(60000)
是系统的一部分,其设计更多的是通用性而不是速度。 (另外,mysql> CREATE TABLE `tempTable` AS SELECT `columnYouWant` from `table`;
$> mysqldump yourDB tempTable > temp.sql
生成的整数从0到999,而不是1到1000。)
答案 1 :(得分:3)
在我看来numpy.random.randint
明显更快。
%timeit scipy.stats.randint(0,1000).rvs(60000)
59.6 ms ± 956 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit np.random.randint(0, 1000, 60000)
202 µs ± 1.67 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)