我正在尝试在 Python 中重现一些涉及随机数生成的 C++ 代码。C++代码使用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;
}
Run Code Online (Sandbox Code Playgroud)
Python版本是(NumPy 1.23.3)
import numpy as np
rng = np.random.Generator(np.random.MT19937(1234))
for _ in range(10):
print(rng.random())
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,随机种子都设置为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
Run Code Online (Sandbox Code Playgroud)
而Python代码输出
0.12038356302504949
0.4037014194964441
0.8777026256367374
0.9565788014497463
0.42646002242298486
0.28304326113156464
0.9009410688498408
0.830833142531224
0.6752899264264728
0.3977176012599666
Run Code Online (Sandbox Code Playgroud)
尽管种子相同,为什么两个 MT19937 生成器会产生不同的序列?我如何(如果可能)使它们相同?