gpt4 book ai didi

python - C++ 和 Python 实现之间的不同伪随机数

转载 作者:行者123 更新时间:2023-11-30 03:15:17 26 4
gpt4 key购买 nike

我正在尝试将 C++ 代码重现为 Python 3.6,但伪随机数的序列在每个实现中都不同。两种实现的种子相同,据我所知,两者都使用 Mersenne Twister 算法。

我做错了什么?

记住 1:两个代码使用相同的种子

记住 2:据我所知,这两个代码都使用了实现相同算法 (Mersenne Twister) 的函数。

C++:

#include <random>
#include <iostream>
int main(int argc, char* argv[])
{
std::mt19937 gen(2);
std::uniform_int_distribution<> dis(0, 61);

for (int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';

return 0;
}

python 3.6:

import numpy as np
rng = np.random.RandomState(2)
for i in range(10):
print(str(rng.randint(0, 62)))

注意:randint 有一个唯一的上限。这就是为什么我在 C++ 代码上使用 61,而在 Python 代码上使用 62。

最佳答案

您应该注意到 C++ 的标准库分发版(包括 std::uniform_int_distribution)使用实现定义的算法。换句话说,这些实现可能会根据您选择的 C++ 库实现而改变,而这些库将来可能会改变那些算法。 (这与 C++ 的 随机引擎 类形成对比,例如 std::mt19937,后者确实保证从同一种子返回相同的伪随机值。)另请参见 this answer

您最好的做法是实现或找到 RNG 算法的稳定实现(例如我在 my article 中描述的算法)并实现它们提供的 transform the random numbers 方法。 (在为特定应用程序选择 RNG 时需要牢记某些事项;我在此处链接的第一篇文章提供了更多信息。)

关于python - C++ 和 Python 实现之间的不同伪随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com