我创建了一个函数,假设生成一组从0到1的正常随机数。虽然,似乎每次运行函数时输出都是相同的。我不确定是什么问题。
以下是代码:
MatrixXd generateGaussianNoise(int n, int m){
MatrixXd M(n,m);
normal_distribution<double> nd(0.0, 1.0);
random_device rd;
mt19937 gen(rd());
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
M(i,j) = nd(gen);
}
}
return M;
}
n = 4
和m = 1
0.414089
0.225568
0.413464
2.53933
我使用了Eigen库,我只是想知道为什么每次运行它都会生成相同的数字。
答案 0 :(得分:4)
自: http://en.cppreference.com/w/cpp/numeric/random/random_device
如果非确定性源(例如,硬件设备)对于实现不可用,则可以根据实现定义的伪随机数引擎来实现std :: random_device。在这种情况下,每个std :: random_device对象可以生成相同的数字序列。
因此,我认为您应该查看您在这里实际使用的库堆栈,以及您在特定实现中对random_device
的了解。
我意识到这可能实际上是&#34; Why do I get the same sequence for every run with std::random_device with mingw gcc4.8.1?&#34;的复制品。
此外,它至少曾经是初始化一个新的mt19937
实例会有点贵。因此,除了随机性质之外,您还有性能原因,无法为每个函数调用重新初始化random_device
和mt19937
实例。我会在这里寻找某种单身,除非你有非常明确的限制(在库中构建,不清楚的并发性),这将使这成为一个不可靠的选择。