繁体   English   中英

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

[英]How to specify a random number generator in numpy

我正在使用python构建蒙特卡罗模拟,并且到目前为止已经使用numpy来生成我的随机变量。 然而,我刚刚了解到numpy使用Mersenne Twister算法生成随机数,基于我有限的理解,这在蒙特卡罗模拟中是不可取的。 我更喜欢使用MRG32k3a,但我也想利用numpy的分配功能。 有没有办法让numpy使用我选择的生成器,或者是否有另一个库可以使用我喜欢的生成器选项给我相同的功能?

为什么不在python中自己编写代码呢?

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

如果你担心速度(但首先对它进行配置!)你可以包装C或F代码并使用例如CFFI,f2py等直接从python调用它 - 参见eg

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可能是一个有用的参考。

你能做任何预先计算吗?

希望在某种程度上有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM