如何在numpy中指定随机数生成器

时间:2019-01-30 20:36:36

标签: python numpy random montecarlo

我正在使用python构建蒙特卡洛模拟,并且到目前为止,一直在使用numpy生成我的随机变量。但是,我刚刚了解到numpy使用Mersenne Twister算法生成其随机数,基于我的有限理解,在蒙特卡洛模拟中这是不可取的。我更喜欢使用MRG32k3a,但我也想利用numpy的分发功能。有什么方法可以让numpy使用我选择的生成器,还是有另一个库可以为我提供相同的功能,并且可以选择使用我喜欢的生成器?

1 个答案:

答案 0 :(得分:0)

为什么不自己用python编写代码?

我在http://simul.iro.umontreal.ca/rng/MRG32k3a.c找到了该算法的示例实现(在http://www-labs.iro.umontreal.ca/~simul/rng找到了很多其他算法)

如果您担心速度(但请先对其进行分析!),则可以包装C或F代码,并使用python直接从python调用它。 CFFI,f2py等-参见例如

https://scipy-lectures.org/advanced/interfacing_with_c/interfacing_with_c.html

但是考虑到它只有几行C编码,所以用python进行编辑应该不会太有挑战性,对吧?

您还可以在https://github.com/bashtage/randomgen处提交拉取请求(或很好地要求作者包括您选择的生成器)。

很抱歉,这不能满足您对发行的需求,但是也许这是一个开始,并且将会有更好的答案。

也许还可以弄清楚为什么Mersenne不能满足您的个人目的-您是否进行了测试,以及根据什么优点来决定?

https://scicomp.stackexchange.com/questions/23547/parallel-mersenne-twister-for-monte-carlo对于您可能是有用的参考。

您可以进行任何预计算吗?

希望对您有所帮助。