[英]Generating Gaussian Noise
我创建了一个函数,该函数假定将生成一组从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库,我只是想知道为什么每次运行它都会产生相同的数字。
来自: http : //en.cppreference.com/w/cpp/numeric/random/random_device
如果不确定性源(例如,硬件设备)不可用于实现,则可以根据实现定义的伪随机数引擎来实现std :: random_device。 在这种情况下,每个std :: random_device对象都可以生成相同的数字序列。
因此,我认为您应该调查一下您在这里实际使用的库堆栈,以及在特定实现中对random_device
的了解。
我意识到,这实际上可能是“ 为什么在mingw gcc4.8.1的std :: random_device的每次运行中都得到相同的顺序? ”的重复 。
此外,至少过去是初始化一个新的mt19937
实例会很昂贵。 因此,除了性能的随机性外,还有性能方面的原因,因此不能为每个函数调用重新random_device
和mt19937
实例。 除非您有非常明确的约束(在库中构建,并发性不清楚),否则这将是一个不可行的选择,我将在这里进行单例讨论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.