2013-08-28 6 views
5

numpyの乱数ジェネレータをMatlabの乱数と同じシードにする方法はありますか?乱数生成を使用するMatlabとNumpyコードを比較する

私はMATLABで次のことを試してみました:numpyのとiPythonで

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

ans = 

    0.9794 -0.5484 
    -0.2656 -0.0963 

そして、次の両方の配列で

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の同じアルゴリズムの2つの実装を比較することをお勧めしますか?

ありがとうございます!

+1

あなたはMATLABの 'twister'の代わりに、デフォルトを使用しようとすることができPythonの組み込み 'random.random()'を使用してください。しかし、私はあなたがまったく同じ結果を再現できることを疑う。私はあなたが乱数が同じであることに頼るべきではないと言いたいと思います。良い無作為アルゴリズムでは、これらの数値が十分にランダムであるかどうかだけが重要です.MATLABとnumpyの両方の実装で十分です。テストのためにランダムな入力を作成したいのであれば、単純にそれらをファイルに保存し、MATLABとPythonの両方でファイルをロードするだけです。 – Bakuriu

答えて

0
  1. 2つのlangugesの1つにそれらを生成して保存し、他の言語にインポートする方法があります。これは簡単ですが、簡単なテキストファイルに書き込むことができます。

  2. これが可能でない場合や望ましい場合は、擬似乱数の生成を自分自身で行うことで、数値が同じであることを確認することもできます。 Build your own simple random numbers

  3. 手作りランダムジェネレータの品質が十分でない場合は、1つの言語でランダム生成関数を作成してから呼び出すことができますもう片方。 Pythonからmatlabを呼び出すのが最も簡単な方法です。

  4. あなたが運が良ければ、設定で遊んでみてください。例えば、(古い)seedの入力をmatlabs random関数に入力してみてください。あるいは、さまざまな種類の発電機を試してみてください。私は両方の言語のデフォルトがメルセンヌ・ツイスターであると信じていますが、この実装が同じでない場合は、おそらく単純なものです。 Bakuriuとして

0

matlabスクリプトを実行して、Pythonコード内からシードに基づいて乱数を取得する方法はありますか?

3

それは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

ちょうどさらにツイスターを使用して明確にしたかったです/ seedingメソッド:MATLABとnumpyは、このシードを使用して同じシーケンスを生成しますが、matricesでそれらを埋めるdiffere ntly。 のpython行ダウンを行くながら

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 

のpython:

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

関連する問題