你能在 python 中复制 matlab 的旧伪随机数生成器吗?

Can you replicate matlab's older pseudo-random number generators in python?

我正在尝试分析 python 中的随机数的随机流。具体来说,我正在研究来自 matlab 的以下伪随机流:mt19937ar(Mersenne Twister)、mcg16807(LCG)和 swb2712(带借位生成器的修改减法)。这是 matlab 的 PRNG 的 reference page

我知道 Mersenne Twister 是 python 中使用的默认随机生成器,我相信 numpy,mcg16807 也应该是可复制的,因为它是 LCG,但我不确定如何复制 swb2712 python 因为它可能是 matlab 专有的,我找不到源代码。我正在尝试做的事情是可行的还是我应该诉诸于使用 matlab 并称之为一天?

从这个博客来看,它似乎是基于George Marsaglia的ziggurat算法的变体(生成正态分布的随机数) https://blogs.mathworks.com/cleve/2015/05/18/the-ziggurat-random-normal-generator/

两个有用的参考...

George Marsaglia 和 W.W.Tsang,"The ziggurat method for generating random variables." 统计软件杂志 5, 1-7, 2000 http://www.jstatsoft.org/v05/i08

Jurgen A. Doonnik,"An Improved Ziggurat Method to Generate Normal Random Samples." PDF,纳特菲尔德学院,牛津大学,2005 年 http://www.doornik.com/research/ziggurat.pdf

本演示文稿还将其详细描述为 swb2712:修改后的带借位减法生成器,滞后 27 和 12 ... http://profmsaeed.org/wp-content/uploads/2009/08/MATLAB-V.ppt

希望对您有所帮助!