gpt4 book ai didi

c++ - 产生高斯噪声

转载 作者:行者123 更新时间:2023-11-27 23:56:53 24 4
gpt4 key购买 nike

我创建了一个函数,它假设生成一组从 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 may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case each std::random_device object may generate the same number sequence.

因此,我认为您应该查看您在此处实际使用的库堆栈,以及在您的特定实现中对 random_device 的已知信息。

我意识到这实际上可能是“Why do I get the same sequence for every run with std::random_device with mingw gcc4.8.1?”的拷贝。

此外,至少在过去,初始化一个新的 mt19937 实例会很昂贵。因此,除了随机性质量之外,您还有性能原因不能为每个函数调用重新初始化您的 random_devicemt19937 实例。我会在这里选择某种单例,除非您有非常明确的约束(在库中构建,不明确的并发性),这会使它成为一个不可行的选择。

关于c++ - 产生高斯噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42043532/

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