我正在使用python构建蒙特卡罗模拟,并且到目前为止已经使用numpy来生成我的随机变量。然而,我刚刚了解到numpy使用Mersenne Twister算法生成随机数,基于我有限的理解,这在monte carlo模拟中是不可取的。我更喜欢使用MRG32k3a,但我也想利用numpy的分配功能。有没有办法让numpy使用我选择的生成器,或者是否有另一个库可以使用我喜欢的生成器选项给我相同的功能?
为什么不在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可能是一个有用的参考。
你能做任何预先计算吗?
希望在某种程度上有所帮助。