在Eigen C++中乘以矩阵给出了错误的维数
问题描述:
我无法理解为什么我通过使用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值填充。
如何获得正确的协方差矩阵?
答
本征是正确的,因为它再现的基本数学:如果A
是尺寸的矩阵n x m
和B
具有尺寸m x k
,然后A*B
具有尺寸n x k
。
适用于您的问题,如果你的矩阵rotatedlocalspace
是尺寸10 x 3
和localspace
具有尺寸3 x 10
,然后rotatedlocalspace*localspace
具有尺寸
(10 x 3) * (3 x 10) -> 10 x 10.
您还适用不改变尺寸的标量划分。
如果您期望不同的维度,那么尝试通过矩阵乘积中的因子。这将获得3x3
矩阵。
由于[MxK]矩阵乘以[KxN]矩阵会给出[MxN]矩阵。 – 2014-11-14 23:06:22