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

问题描述 投票:4回答:1

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

python numpy random montecarlo
1个回答
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可能是一个有用的参考。

你能做任何预先计算吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.