Eigen::Matrix 有一个 setRandom() 方法,它将矩阵的所有系数设置为随机值。但是,是否有一种内置方法可以将所有矩阵系数设置为随机值,同时指定要使用的分布。
有没有办法实现类似以下内容:
Eigen::Matrix3f myMatrix;
std::tr1::mt19937 gen;
std::tr1::uniform_int<int> dist(0,MT_MAX);
myMatrix.setRandom(dist(gen));
您可以使用 Boost 和 unaryExpr 做您想做的事情。您传递给 unaryExpr 的函数需要接受一个虚拟输入,您可以忽略该输入。
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace boost;
using namespace Eigen;
double sample(double dummy)
{
static mt19937 rng;
static normal_distribution<> nd(3.0,1.0);
return nd(rng);
}
int main()
{
MatrixXd m =MatrixXd::Zero(2,3).unaryExpr(ptr_fun(sample));
cout << m << endl;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)