27

2つの別々の分析のためにRとMatlabでデータを生成していますが、2つのシステムの結果が同等であるかどうかを判断したいと思います。2セットのコードの間には、乱数ジェネレーターによる固有の変動性があります。可能であれば、この変動の原因を取り除きたいと思います。MatlabとRの両方で同じ開始シードを設定する方法を知っている人はいますか?以下にいくつかのデモコードを提供します。

%Matlab code
seed=rng %save seed
matlabtime1=randn(1,5) %generate 5 random numbers from standard normal 
rng(seed) %get saved seed
matlabtime2=randn(1,5) %generates same output as matlabtime1

#R code
set.seed(3) #save seed
r.time1=rnorm(5) #generate 5 random numbers from standard normal 
set.seed(3) #get saved seed
r.time2=rnorm(5) #generates same output as r.time1

基本的に、matlabtime2とr.time2の結果を正確に一致させたいと思います。(私が使用しているコードは、この実例となるデモよりも複雑であるため、1つの言語のみで書き直すことは実際には実行可能なオプションではありません。)

4

1 に答える 1

29

R と MATLAB で同じ乱数を取得するのは難しいと思います。同じアルゴリズム (Mersenne Twister) に同じシードを使用しても。

それらがどのように実装されているかについてだと思います-同じシードを使用しても、初期状態が異なります(RとMATLABの両方で状態を印刷して検査できます)。

過去にこれが必要になったとき、ランダムな入力を生成し、それをファイルとしてディスクに保存し、MATLAB と R の両方に供給しました。

もう 1 つのオプションは、R と MATLAB の両方の乱数ジェネレーター (C/C++ にはこれらの多くがあります) の C ラッパーを作成し、組み込みの代わりにそれらを呼び出すことです。

于 2012-05-31T05:03:29.953 に答える