小编Zhe*_*Yue的帖子

C++ 和 NumPy 中的 MT19937 生成器生成不同的数字

我正在尝试在 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 生成器会产生不同的序列?我如何(如果可能)使它们相同?

c++ python random numpy random-seed

3
推荐指数
1
解决办法
202
查看次数

标签 统计

c++ ×1

numpy ×1

python ×1

random ×1

random-seed ×1