【发布时间】:2015-04-26 12:38:01
【问题描述】:
我正在尝试在 C++ 中对向量/矩阵执行右除法,就像在 matlab 中使用 / 运算符所做的那样。 更具体地说,我使用的是 eigen,我尝试进行除法的代码 sn-p 如下:
#include <Eigen/Dense>
// Do stuff
// ...
Vector3d instance;
Vector3d mu;
Matrix3d covar;
int dimensionality;
// do stuff initialize here
// Calculate cholesky decomposition
Eigen::Matrix3d normTransform(dimensionality, dimensionality);
Eigen::LLT<Eigen::Matrix3d> cholSolver(covar);
if (cholSolver.info()==Eigen::Success)
normTransform = cholSolver.matrixL();
else {
Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigenSolver(covar);
normTransform = eigenSolver.eigenvectors()
* eigenSolver.eigenvalues().cwiseSqrt().asDiagonal();
}
RowVector3d difference = instance - mu;
difference.transpose().array() * normTransform.inverse().array();
//YOU_MIXED MATRIXES OF DIFFERENT SIZES
difference.array() * normTransform.inverse().array();
//YOU_MIXED MATRIXES OF DIFFERENT SIZES
difference.array() / normTransform.array();
//YOU_MIXED MATRIXES OF DIFFERENT SIZES
etc..
Row 向量是一个 3X1 向量,normTransform 是一个 3X3 矩阵。 我无法理解应该如何执行操作。
任何线索我做错了什么?
谢谢。
全景。
【问题讨论】:
-
已修复。显然我想得太复杂了。一个简单的 RowVector3d adsf = 差异 * normTransform.inverse();成功了
-
您介意将评论改写为answer吗?
标签: c++ matrix vector division eigen