为了检查我的C代码,我希望能够让Boost :: Random和Matlab生成相同的随机数.
所以对于Boost,我使用代码:
boost::mt19937 var(static_cast (std::time(0)));
boost::uniform_int<> dist(1, 6);
boost::variate_generator<:mt19937 boost::uniform_int> > die(var, dist);
die.engine().seed(0);
for(int i = 0; i < 10; ++i) {
std::cout << die() << " ";
}
std::cout << std::endl;
产生(每次运行程序):
4 4 5 6 4 6 4 6 3 4
对于matlab我使用:
RandStream.setDefaultStream(RandStream('mt19937ar','seed',0));
randi(6,1,10)
产生(每次运行程序):
5 6 1 6 4 1 2 4 6 6
这是奇怪的,因为两者都使用相同的算法和相同的种子.
我错过了什么?
似乎Python(使用numpy)和Matlab似乎在随机统一数字中具有可比性:
MATLAB
RandStream.setDefaultStream(RandStream( ‘mt19937ar’, ‘种子’,203));兰特(1,10)
0.8479 0.1889 0.4506 0.6253 0.9697 0.2078 0.5944 0.9115 0.2457 0.7743
Python:
random.seed(203); random.random(10)
阵列([0.84790006,0.18893843,0.45060688,0.62534723,0.96974765,
0.20780668,0.59444858,0.91145688,0.24568615,0.77430378])
C Boost
0.8479 0.667228 0.188938 0.715892 0.450607 0.0790326 0.625347 0.972369 0.969748 0.858771
这与其他Python和Matlab值相同……