生成高斯噪声
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
的了解。
我意识到这实际上可能是"为什么我每次使用std::random_device和mingw gcc4.8.1运行都会得到相同的序列?"的重复。
此外,至少过去初始化一个新的mt19937
实例会有点昂贵。因此,除了随机性的质量之外,您还有性能方面的原因,不能为每个函数调用重新初始化random_device
和mt19937
实例。我会在这里选择某种单例,除非你有非常明确的约束(在库中构建,不清楚的并发性),这将使它成为一个不可识别的选择。
相关文章:
- 在C++上实现高斯赛德尔迭代方法
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 用于创建高斯随机数的 c++ 函数
- 将高斯模糊应用于灰度图像
- 高斯雅各比法
- 用高斯Seidel红色黑色求解1D泊松方程
- 如何改变高斯分布(提升)中的种子
- 并行化高斯模糊链
- 为什么在 C++ 中实现高斯勒让德算法没有产生结果
- 生成高斯噪声
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- 使用高斯模糊进行图像卷积,可以加速
- 如何使用 1D 高斯内核在 Filter2D 上创建自定义 2D 内核
- ***检测到堆栈粉碎***:在高斯消除中
- 使用C 加入高斯噪声
- 高斯滤波器核值
- 用于高斯过程的准随机数生成器
- 加入高斯噪声
- 使用Qt添加高斯白噪声