opencv中的矩阵乘法错误?
我知道在opencv中有3种方法可以乘法矩阵,一种是:opencv中的矩阵乘法错误?,opencv,Opencv,我知道在opencv中有3种方法可以乘法矩阵,一种是: cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0); 另一个: cvMulTransposed(M1, Mult, 0); 第三: cvMul(M1, M1T, Mult); 我基本上是把一个矩阵乘以它的转置。乘法后,矩阵应该是对称的。。但是上面的每一种方法都给了我一个不对称的、完全错误的输出。。以下是原始(M1)矩阵: 但将其乘以其转置得到: rows: 5 cols: 5 dt: f dat
cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0);
另一个:
cvMulTransposed(M1, Mult, 0);
第三:
cvMul(M1, M1T, Mult);
我基本上是把一个矩阵乘以它的转置。乘法后,矩阵应该是对称的。。但是上面的每一种方法都给了我一个不对称的、完全错误的输出。。以下是原始(M1)矩阵:
但将其乘以其转置得到:
rows: 5
cols: 5
dt: f
data: [ 927321., 1014163., 923303., 923303., 947641., 1014163.,
1260101., 1062130., 1062130., 1102823., 923303., 1062130.,
1004488., 1004488., 990651., 923303., 1062130., 1004488.,
1004488., 990651., 947641., 1102823., 990651., 990651., 1116004. ]
这些值是不对称的,我也不明白它们是怎么变得这么大的
cvMultransposed和cvGEMM给出的结果与上面复制的结果相同。。cvMul给出一些运行时错误并返回垃圾值。有什么建议吗?我无法解释对称性的缺失,但数字的大小正是我所期望的。当你将矩阵相乘时,你会从第一行得到内积,从第二行得到一列。因为行是50个元素,元素在50-200范围内,所以对于输出矩阵中的一个元素,大约是50*100*100=500000。我无法解释对称性的缺乏,但数字的大小是我所期望的。当你将矩阵相乘时,你会从第一行得到内积,从第二行得到一列。因为您的行是50个元素,并且元素在50-200范围内,所以对于输出矩阵中的一个元素,大约是50*100*100=500000。除了预期的大输出值(Japreis已经告诉过您),您得到的矩阵是对称的 我将其对齐以提高可读性:
reshape(a,5,5)
ans =
927321 1014163 923303 923303 947641
1014163 1260101 1062130 1062130 1102823
923303 1062130 1004488 1004488 990651
923303 1062130 1004488 1004488 990651
947641 1102823 990651 990651 1116004
所以,这里没有错,如果你去问为什么X会在将来出现,你应该仔细检查X确实是这样的…除了预期的大输出值(Japreis已经告诉过你),你得到的矩阵是对称的 我将其对齐以提高可读性:
reshape(a,5,5)
ans =
927321 1014163 923303 923303 947641
1014163 1260101 1062130 1062130 1102823
923303 1062130 1004488 1004488 990651
923303 1062130 1004488 1004488 990651
947641 1102823 990651 990651 1116004
所以,这里没有错,如果你去问为什么X会在将来出现,你应该仔细检查X是否确实是这样…大多数时候,我发现一个“错误”的结果,这是因为我不理解API或者正确的答案是什么样子的。公开可用的软件中出现错误的可能性较小。一个庞大的用户群几乎可以保证,在我发现并修复该漏洞之前,会有其他人发现该漏洞。我几乎可以肯定,问题在于你、你的理解和你的代码。我不是说这是一个bug,我肯定这是我的错误,但我整天都在努力,无法修复它,这就是我在这里寻求帮助和建议的原因。@Faraz Khan:您应该发布一些生成这种意外行为的代码,以便我们能够理解原因。大多数情况下,我发现“错误”的结果,是因为我不理解API或正确的答案。公开可用的软件中出现错误的可能性较小。一个庞大的用户群几乎可以保证,在我发现并修复该漏洞之前,会有其他人发现该漏洞。我几乎可以肯定,问题在于你、你的理解和你的代码。我不是说这是一个bug,我肯定这是我的错误,但我整天都在努力,无法修复它,这就是我在这里寻求帮助和建议的原因。@Faraz Khan:您应该发布一些生成这种意外行为的代码,以便我们能够理解原因。很有趣。。谢谢你指出这一点。。我试着用另一种方式重新安排。。谢谢你指出这一点。。我试着换一种方式重新安排谢谢你指出这一点。。我想我看错问题了。。我正在对这些值进行标准化处理。。也许这能解决我的问题。另外,你能告诉我你是如何与黑客帝国结盟的吗?我认为重塑只能在以下格式下工作:
cvrestrape(mat和row_标题,0,1)代码>。。你们在编译器中显示了矩阵吗?我认为只有当我们想查看矩阵的内容时,才可以使用cvSave。在matlab(而不是opencv)中,重塑纯粹是为了显示,因为我是以单行形式输入数字的。我只是把你的矩阵输出(你的第二行)对齐了。非常感谢你指出这一点。。我想我看错问题了。。我正在对这些值进行标准化处理。。也许这能解决我的问题。另外,你能告诉我你是如何与黑客帝国结盟的吗?我认为重塑只能在以下格式下工作:cvrestrape(mat和row_标题,0,1)代码>。。你们在编译器中显示了矩阵吗?我认为只有当我们想查看矩阵的内容时,才可以使用cvSave。在matlab(而不是opencv)中,重塑纯粹是为了显示,因为我是以单行形式输入数字的。我只是把你的矩阵输出(你的第二行)对齐了。