Eigen c ++中的乘法矩阵给出了错误的维度

时间:2014-11-14 23:04:14

标签: c++ matrix matrix-multiplication eigen

我无法理解为什么我使用C ++中的Eigen库将10x3矩阵与3x10矩阵相乘得到10x10矩阵。

按照http://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixArithmetic.html上的文档,我想出了

const int NUM_OBSERVATIONS = 10;
const int NUM_DIMENSIONS = 3;

MatrixXf localspace(NUM_DIMENSIONS, NUM_OBSERVATIONS);
MatrixXf rotatedlocalspace(NUM_OBSERVATIONS, NUM_DIMENSIONS);
MatrixXf covariance(NUM_DIMENSIONS, NUM_DIMENSIONS);

covariance = (rotatedlocalspace * localspace) / (NUM_OBSERVATIONS - 1);

cout << covariance << endl; 

当我试图为每个维度获得3x3协方差矩阵时,输出给出10x10矩阵(这些是平均居中的XYZ点)。当计算协方差时,“localspace”和“rotatelocalspace”都填充浮点值。

如何获得正确的协方差矩阵?

1 个答案:

答案 0 :(得分:1)

Eigen是正确的,因为它再现了基本数学:如果A是维n x m的矩阵且B具有维m x k,则A*B具有维度n x k

如果您的矩阵rotatedlocalspace具有维度10 x 3localspace具有维度3 x 10,那么应用于您的问题,则rotatedlocalspace*localspace具有维度

(10 x 3) * (3 x 10) ->  10 x 10.

您进一步应用的标量除法不会改变维度。

如果您期望不同的维度,请尝试在矩阵产品中对因子进行通勤。您将获得3x3矩阵。