2014-11-14 42 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矩陣。