Matlab和R中的相同随机种子

时间:2012-05-31 04:22:07

标签: r matlab

我在R和Matlab中生成数据进行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 个答案:

答案 0 :(得分:27)

  

我发现很难在R和中获得相同的随机数   MATLAB - 甚至为同一算法使用相同的种子(Mersenne   捻线)。

我想这是关于它们是如何实现的 - 即使使用相同的种子,它们也有不同的初始状态(您可以在R和MATLAB中打印和检查状态)。

过去我需要这个时,我会生成随机输入,将其保存为磁盘上的文件,并将其提供给MATLAB和R。

另一个选择是为R和MATLAB编写一个随机数生成器的C包装器(在C / C ++中有很多这样的包装器)并调用它们而不是内置的。