C++与Python实现中的伪随机数

2024-04-19 06:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将C++代码复制到Python 3.6中,但是伪随机数的顺序在每个实现中都是不同的。这两个实现的种子是相同的,据我所知,两者都使用梅森-惠斯特算法。在

我做错什么了?在

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

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

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:

^{pr2}$

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


Tags: 函数代码算法include顺序mainrandom种子
2条回答

您应该注意C++的标准库分布,包括^ {CD1>},使用实现定义的算法。换句话说,这些实现可能取决于您选择的C++库实现方式,而这些库可能会在将来改变这些算法。(这与C++的随机引擎类,如^ {< CD2> }形成对比,这保证了从同一个种子返回相同的伪随机值。)也见this answer。在

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

从RNG到单个有界整数没有唯一的方法。请参见示例:

http://www.pcg-random.org/posts/bounded-rands.html

有几个版本。请注意,C++和Python在这里使用不同的选项,因此,您将获得与“相同”RNG和种子不同的序列。在

相关问题 更多 >