我无法理解为什么我使用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”都填充浮点值。
如何获得正确的协方差矩阵?
答案 0 :(得分:1)
Eigen是正确的,因为它再现了基本数学:如果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
矩阵。