【问题标题】:Multiplying matrices in Eigen c++ gives wrong dimensions在 Eigen C++ 中乘以矩阵会给出错误的维度
【发布时间】:2015-01-12 10:51:27
【问题描述】:

我无法理解为什么使用 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”和“rotatedlocalspace”都用浮点值填充。

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

【问题讨论】:

  • 因为将 [MxK] 矩阵乘以 [KxN] 矩阵会得到 [MxN] 矩阵。

标签: c++ matrix matrix-multiplication eigen


【解决方案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 矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2014-11-14
    • 1970-01-01
    • 2016-06-07
    • 2021-11-24
    相关资源
    最近更新 更多