2014-11-14 31 views
0

我无法理解为什么我通过使用C++中的特征库将10x3矩阵乘以3x10矩阵而得到10x10矩阵。在Eigen C++中乘以矩阵给出了错误的维数

通过在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; 

输出给出了一个10×10矩阵,当我试图获得每个维度3x3的协方差矩阵(这些平均心XYZ点)。当计算协方差时,“localspace”和“rotatedlocalspace”都用float值填充。

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

+2

由于[MxK]矩阵乘以[KxN]矩阵会给出[MxN]矩阵。 – 2014-11-14 23:06:22

回答

1

本征是正确的,因为它再现的基本数学:如果A是尺寸的矩阵n x mB具有尺寸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矩阵。