Как указать генератор случайных чисел в numpy - PullRequest
0 голосов
/ 30 января 2019

Я строю симуляцию Монте-Карло, используя python, и до сих пор использовал numpy для генерации моих случайных переменных.Однако я только что узнал, что NumPy использует алгоритм Мерсенна Твистера для получения своих случайных чисел, что, исходя из моего ограниченного понимания, нежелательно при моделировании в Монте-Карло.Я бы предпочел использовать MRG32k3a, но я также хотел бы воспользоваться функциями распределения numpy.Можно ли как-нибудь заставить numpy использовать генератор по моему выбору, или есть другая библиотека, которая предоставит мне ту же функциональность с возможностью использования моего предпочтительного генератора?

1 Ответ

0 голосов
/ 25 марта 2019

Почему бы вам не написать это самостоятельно на python?

Я нашел пример реализации алгоритма на http://simul.iro.umontreal.ca/rng/MRG32k3a.c (со многими другими на http://www -лабах.iro.umontreal.ca/~simul/rng)

Если вы беспокоитесь о скорости (но сначала профилируйте ее!), вы можете обернуть код C или F и вызвать его напрямую из 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 может быть полезным справочным материалом для вас.

Можете ли вы сделать какие-либо предварительные вычисления?

Надеюсь, что это поможет немного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...