是否有更快的方法来获得一个充满随机数的numpy数组而不是内置的numpy.random.rand(count)
函数?我知道内置的方法是使用Mersenne Twister。
我想使用numpy进行蒙特卡罗模拟,并且获取随机数是占用了大部分时间。一个简单的例子,通过monte carlo与200E6随机数进行积分计算pi只能通过我的程序处理大约116.8 MB / s。使用xor128()作为生成器以C ++编写的可编译程序处理数百MB / s。
编辑:计算的生成率
答案 0 :(得分:3)
如果可以接受,您可能会通过降低准确性来略微提高性能。我是通过使用randint
和缩放:
使用ipython %%timeit
count =1000
numpy.random.rand(count)
10000 loops, best of 3: 24.3us per loop
numpy.random.randint(0,1000,count)*0.001
10000 loops, best of 3: 21.4us per loop