gpt4 book ai didi

c++ - 错误 : no match for ‘operator*’ (operand types are ‘QGenericMatrix<4, 4, float>’ and ‘QGenericMatrix<4, 3, float>’ )

转载 作者:行者123 更新时间:2023-11-30 04:57:22 25 4
gpt4 key购买 nike

我正在尝试将两个矩阵相乘:

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;

但是,我收到错误:

error: no match for ‘operator*’ (operand types are ‘QGenericMatrix<4, 4, float>’ and ‘QGenericMatrix<4, 3, float>’)


this operator用于乘以 QGenericMatrix 的两个实例,但我很困惑,不确定如何将它与它的 NNxM2M1xNN 一起使用。


更新

按照@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!好吧,这有点令人困惑。

最佳答案

原因

在数学中乘法顺序应该是MxPPxN生产MxN产品。换句话说,矩阵的内部维度必须一致。

但是, QGenericMatrix<M1, M2, TT> operator* 的文档状态:

Returns the product of the NNxM2 matrix m1 and the M1xNN matrix m2 to produce a M1xM2 matrix result.

这意味着,为了得到 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
)

关于c++ - 错误 : no match for ‘operator*’ (operand types are ‘QGenericMatrix<4, 4, float>’ and ‘QGenericMatrix<4, 3, float>’ ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52032848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com