我试图将两个矩阵相乘:
float values4x3[] = {
3, 3, 3,
1, 1, 1,
2, 2, 2,
1, 1, 1
};
QGenericMatrix< 4, 3, float > myMat4x3 (values4x3);
float values4x4[] = {
3, 3, 3, 3,
1, 1, 1, 1,
2, 2, 2, 2,
1, 1, 1, 1
};
QGenericMatrix< 4, 4, float > myMat4x4 (values4x4);
QGenericMatrix< 4, 3, float > product4x3 = myMat4x4 * myMat4x3;
qDebug() << __func__ << "product4x3 = " << product4x3;
但是,我收到错误消息:
错误:与“ operator *”不匹配(操作数类型为“ QGenericMatrix <4,4,float>”和“ QGenericMatrix <4,3,float>”)
有this operator用于将QGenericMatrix
的两个实例相乘,但是我很困惑,不确定如何将其与NNxM2
和M1xNN
一起使用。
按照@scopchanov的建议,我交换了两个矩阵,如下所示:
QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;
现在,错误已解决,结果记录如下:
qDebug() << __func__ << "product4x3 = " << product4x3;
日志:
product4x3 = QGenericMatrix<4, 3, float>(
19 19 19 19
10 10 10 10
10 10 10 10
)
上面的结果矩阵实际上是3x4
!好吧,这有点令人困惑。
答案 0 :(得分:1)
在数学中,乘积阶数应为MxP
乘以PxN
乘以得出MxN
乘积。换句话说,矩阵的内部尺寸必须一致。
但是,QGenericMatrix<M1, M2, TT> operator*
的文档指出:
返回NNxM2矩阵m1和M1xNN矩阵m2的乘积以产生M1xM2矩阵结果。
这意味着,为了获得A
和B
的相乘结果,应该先写B
,然后写A
。
说实话,考虑到我们的习惯,我觉得这很奇怪。
像这样交换矩阵的位置:
QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;
对于您给出的示例,结果是:
MainWindow product4x3 = QGenericMatrix<4, 3, float>(
19 19 19 19
10 10 10 10
10 10 10 10
)