簡體   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