2013-08-28 61 views
5

有没有办法让numpy中的随机数生成器生成与Matlab中相同的随机数?比较使用随机数生成的Matlab和Numpy代码

我试图在Matlab如下:

>> rng(1); 
>> randn(2, 2) 

ans = 

    0.9794 -0.5484 
    -0.2656 -0.0963 

而且在IPython中与numpy的以下内容:

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]]) 

值在两个数组是不同的。

或者有人可能会提出一个好主意来比较Matlab和Python中使用随机数生成的相同算法的两个实现。

谢谢!

+1

你可以尝试使用MATLAB的'twister'默认代替生成器并使用python的内置'random.random()'。不过,我怀疑你将能够重现完全相同的结果。我会说你不应该依赖随机数字是相同的。对于一个好的随机算法,唯一重要的是这些数字是否足够随机,并且我假设MATLAB和numpy实现都足够好。如果你只是想创建随机的输入测试,然后简单地将它们保存到文件,并加载MATLAB和Python的文件。 – Bakuriu

回答

0
  1. 确保将相同数字输入到您的过程中的一种方法是,在两种语言之一中生成它们,将其保存并导入其他语言。这很容易,你可以把它们写在一个简单的文本文件中。

  2. 如果这不可能或不可取,您也可以通过自己生成伪随机数来确保数字相同。下面是显示一个简单的一个很简单的例子来实现算法的网站:Build your own simple random numbers

  3. 如果你的自制随机生成的质量是不够的,你可以建立一种语言随机生成功能,以及调用它另一个。最简单的路径可能是从python调用matlab。

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

0

如何从Python代码中运行matlab脚本来获取基于种子的随机数?

3

由于Bakuriu表明,它的工作原理采用MATLABs绕口令:

MATLAB:

>> rand('twister', 1337) 
>> rand() 

ans = 

    0.2620 

的Python(NumPy的):

>>> import numpy as np 
>>> np.random.seed(1337) 
>>> np.random.random() 
0.2620246750155817 
+2

这适用于random.random(),但如果您想将MATLAB'randperm(10)'与'numpy.random.permutation(10)'进行比较,则不适用。他们给出了不同的结果... – linello

6

只是想利用捻线机进一步明确/播种方法:MATLAB和numpy使用这种播种生成相同的序列,但会在不同的矩阵中填充它们ntly。

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 

蟒蛇:

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]]) 
+0

这真的很有帮助! – wwl