【发布时间】:2011-04-12 22:28:32
【问题描述】:
我想知道是否可以用 NumPy 精确地重现 MATLAB 的randn() 的整个序列。我用 Python/Numpy 编写了自己的例程,它给我的结果与其他人所做的 MATLAB 代码略有不同,而且由于随机抽取的不同,我很难找出它的来源。
我发现numpy.random.seed 值在第一次抽奖时产生相同的数字,但从第二次抽奖开始,它就完全不同了。我正在制作大约 20,000 次的多元法线绘图,所以我不想只保存 matlab 绘图并在 Python 中读取它。
【问题讨论】:
-
numpy.random.randn(...)有什么问题?它应该完全满足您的需要,除非您担心使用给定的种子生成完全相同的数字序列......(没关系,显然这就是你想要做的,现在我重新阅读了这个问题。出于模糊的好奇心,为什么你需要完全相同的顺序?) -
你是什么意思“MATLAB代码别人做了”?
randn是一个标准的 MATLAB 函数。我真诚地希望您不要使用 FEX 垃圾堆中的某些“自定义”功能。 -
没什么问题,我需要用给定的种子生成完全相同的数字序列。正如我所说,我使用 NumPy 的例程给了我与 MATLAB 代码不同的结果,我无法调试它,因为随机数不同。我无法确定哪里出了问题。
-
@Nict T 当然不是。我正在运行一些贝叶斯模型,我的代码给出了与 MATLAB 代码不同的估计值。我很确定 MATLAB 代码是正确的,所以我正在尝试调试我的代码,但由于不同的随机抽取,我无法确定计算的不同之处。
-
仍然没有回答您的问题,但保存/加载并不是那么不好。 SciPy 有一个 MATLAB
.mat文件翻译器,因此您可以将您的 MATLAB 工作区转储到一个文件中,并使用 SciPy.io.mio scipy.org/doc/api_docs/SciPy.io.mio.html 轻松导入