gut*_*kha 5 random matrix eigen
Eigen::Matrix 有一个 setRandom() 方法,它将矩阵的所有系数设置为随机值。但是,在指定要使用的分布的同时,是否有一种内置的方法可以将所有矩阵系数设置为随机值。
有没有办法实现以下目标:
Eigen::Matrix3f myMatrix;
std::tr1::mt19937 gen;
std::tr1::uniform_int<int> dist(0,MT_MAX);
myMatrix.setRandom(dist(gen));
Run Code Online (Sandbox Code Playgroud)
除了均匀分布之外,我不知道还有任何其他类型的分布可以直接在矩阵上使用。您可以做的是将 Eigen 提供的均匀分布直接映射到您的自定义分布(如果映射存在)。
假设您的分布是 sigmoid。您可以使用函数 y = a / ( b + c exp(x) ) 将均匀分布映射到 sigmoid 分布。
通过临时将矩阵转换为数组,您可以对矩阵的所有值进行逐元素操作:
Matrix3f uniformM;
uniformM.setRandom();
Matrix3f sigmoidM;
sigmoidM.array() = a * ((0.5*uniformM+0.5).array().exp() * c + b).inv();
Run Code Online (Sandbox Code Playgroud)