我正在尝试用Python复现一些涉及随机数生成的C++代码。C++代码使用MT19937生成器,如下所示:
Python版本为(带有NumPy 1.23.3)
在这两种情况下,随机种子都设置为
Python代码输出时
为什么两个MT19937生成器尽管使用相同的种子却产生不同的序列?如果可能的话,我该如何使它们生成相同的序列?
#include <random>
#include <iostream>
int main() {
std::mt19937 generator(1234);
std::uniform_real_distribution<double> distribution(0.0, 1.0);
for (int i = 0; i < 10; ++i) {
std::cout << distribution(generator) << std::endl;
}
return 0;
}
Python版本为(带有NumPy 1.23.3)
import numpy as np
rng = np.random.Generator(np.random.MT19937(1234))
for _ in range(10):
print(rng.random())
在这两种情况下,随机种子都设置为
1234
。但是在我的机器上(macOS 14.0 ARM),这两个产生了不同的输出。C++代码的输出为:0.497664
0.817838
0.612112
0.77136
0.86067
0.150637
0.198519
0.815163
0.158815
0.116138
Python代码输出时
0.12038356302504949
0.4037014194964441
0.8777026256367374
0.9565788014497463
0.42646002242298486
0.28304326113156464
0.9009410688498408
0.830833142531224
0.6752899264264728
0.3977176012599666
为什么两个MT19937生成器尽管使用相同的种子却产生不同的序列?如果可能的话,我该如何使它们生成相同的序列?