繁体   English   中英

产生高斯噪声

[英]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 = 4m = 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_devicemt19937实例。 除非您有非常明确的约束(在库中构建,并发性不清楚),否则这将是一个不可行的选择,我将在这里进行单例讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM