比较使用随机数生成的Matlab和Numpy代码

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)


Den*_*din 1

  1. 确保将相同数字输入流程的一种方法是用两种语言之一生成它们,保存它们并导入到另一种语言中。这相当简单,您可以将它们写入一个简单的文本文件中。

  2. 如果这是不可能或不可取的,您还可以通过自己生成伪随机数来确保数字相同。这是一个网站,展示了一个易于实现的算法的非常简单的示例:构建您自己的简单随机数

  3. 如果您自制的随机生成器的质量不够,您可以用一种语言构建随机生成函数,然后从另一种语言调用它。最简单的方法可能是从 python 调用 matlab。

  4. 如果您感觉幸运,请尝试调整设置。例如,尝试使用seedmatlabs 随机函数的(过时的)输入。或者尝试使用不同类型的发电机。我相信两种语言的默认值都是 mersenne twinser,但如果这个实现不一样,也许有一个更简单的实现。