c++ - MatrixXf::Random 总是返回相同的矩阵

标签 c++ matrix eigen

我只是玩了一下 Eigen,注意到 MatrixXf::Random(3,3) 总是返回相同的矩阵,例如第一个总是这样:
0.680375 0.59688 -0.329554
-0.211234 0.823295 0.536459
0.566198 -0.604897 -0.444451

这是有意为之的行为还是我只是在监督一些非常简单的事情? (我对数学库的经验接近于零)

我使用的代码:

for(int i = 0; i < 5; i++) {
        MatrixXf A = MatrixXf::Random(3, 3);
        cout << A <<endl;
}

最佳答案

除了 srand,您还可以将空表达式与现代 C++11 随机数生成一起使用:

//see https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution
std::random_device rd;
std::mt19937 gen(rd());  //here you could set the seed, but std::random_device already does that
std::uniform_real_distribution<float> dis(-1.0, 1.0);

Eigen::MatrixXf A = Eigen::MatrixXf::NullaryExpr(3,3,[&](){return dis(gen);});

这也允许使用更复杂的分布,例如正态分布。

关于c++ - MatrixXf::Random 总是返回相同的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292881/

相关文章:

c++ - clang 左/右 3.6 倍表达式

c++ - 如何在包含树中找到哪个 header 包含另一个 header ?

c++ - Netbeans C++ 中的调试无法启动 - OSX Yosemite -

在 R 中的参数值范围内运行 2 个参数的函数

R ave 还是申请?通过具有 strata 变量的函数添加列,但快速且多列

c++ - 以特征类型为参数的函数的返回类型不明确

c++ - 如何在 C++ 中实现以逗号分隔的初始化,例如 Eigen 中的初始化?

c++ - 如何使用 OpenGL 渲染平滑字体(实际上是任何 "flat"形状)?

c++ - 如何检查空行?

c++ - Eigen - 将 vector reshape 为矩阵