use*_*384 6 python random matlab
有没有办法让numpy中的随机数生成器生成与Matlab相同的随机数,给定相同的种子?
我在Matlab中尝试了以下内容:
>> rng(1);
>> randn(2, 2)
ans =
0.9794 -0.5484
-0.2656 -0.0963
Run Code Online (Sandbox Code Playgroud)
以及与Numpy的iPython中的以下内容:
In [21]: import numpy as np
In [22]: np.random.seed(1)
In [23]: np.random.randn(2, 2)
Out[23]:
array([[ 1.624, -0.612],
[-0.528, -1.073]])
Run Code Online (Sandbox Code Playgroud)
两个数组中的值都不同.
或者有人建议比较Matlab和Python中使用随机数生成的相同算法的两个实现是个好主意.
谢谢!
Die*_*ego 13
只是想进一步澄清使用twister /种子方法:MATLAB和numpy使用此种子生成相同的序列,但会以不同的方式填充它们.
MATLAB填写矩阵下来列,而蟒蛇去倒行.因此,为了在两者中获得相同的矩阵,您必须转置:
MATLAB:
rand('twister', 1337);
A = rand(3,5)
A =
Columns 1 through 2
0.262024675015582 0.459316887214567
0.158683972154466 0.321000540520167
0.278126519494360 0.518392820597537
Columns 3 through 4
0.261942925565145 0.115274226683149
0.976085284877434 0.386275068634359
0.732814552690482 0.628501179539712
Column 5
0.125057926335599
0.983548605143641
0.443224868645128
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
import numpy as np
np.random.seed(1337)
A = np.random.random((5,3))
A.T
array([[ 0.26202468, 0.45931689, 0.26194293, 0.11527423, 0.12505793],
[ 0.15868397, 0.32100054, 0.97608528, 0.38627507, 0.98354861],
[ 0.27812652, 0.51839282, 0.73281455, 0.62850118, 0.44322487]])
Run Code Online (Sandbox Code Playgroud)
确保将相同数字输入流程的一种方法是用两种语言之一生成它们,保存它们并导入到另一种语言中。这相当简单,您可以将它们写入一个简单的文本文件中。
如果这是不可能或不可取的,您还可以通过自己生成伪随机数来确保数字相同。这是一个网站,展示了一个易于实现的算法的非常简单的示例:构建您自己的简单随机数
如果您自制的随机生成器的质量不够,您可以用一种语言构建随机生成函数,然后从另一种语言调用它。最简单的方法可能是从 python 调用 matlab。
如果您感觉幸运,请尝试调整设置。例如,尝试使用seedmatlabs 随机函数的(过时的)输入。或者尝试使用不同类型的发电机。我相信两种语言的默认值都是 mersenne twinser,但如果这个实现不一样,也许有一个更简单的实现。