我知道在opencv中有3种乘法矩阵的方法,一种是:
cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0);
:
cvMulTransposed(M1, Mult, 0);
第三:和
cvMul(M1, M1T, Mult);
基本上就是矩阵乘以它的转置。乘法后的矩阵应该是对称的。但是上面的每个方法都给了我一个不对称的和完全错误的输出。这是原始的(M1)矩阵:
rows: 5
cols: 50
dt: f
data: [ 60., 89., 86., 102., 58., 51., 143., 187., 140., 64., 80.,
169., 184., 172., 67., 90., 174., 191., 175., 41., 97., 86., 171.,
104., 87., 145., 164., 176., 157., 119., 176., 177., 180., 179.,
150., 44., 182., 148., 182., 38., 48., 197., 171., 171., 39., 48.,
169., 163., 141., 39., 93., 149., 169., 184., 56., 120., 166.,
182., 168., 144., 132., 172., 187., 173., 157., 164., 157., 152.,
166., 172., 175., 157., 133., 170., 140., 180., 164., 173., 175.,
152., 178., 176., 166., 143., 158., 177., 186., 172., 138., 141.,
182., 191., 169., 159., 34., 185., 154., 155., 171., 32., 81.,
154., 163., 112., 52., 126., 163., 183., 165., 53., 136., 176.,
184., 174., 51., 148., 173., 178., 139., 160., 158., 147., 163.,
154., 135., 146., 157., 181., 161., 79., 39., 172., 187., 174.,
45., 44., 187., 153., 173., 39., 46., 187., 145., 160., 36., 38.,
177., 155., 150., 37., 81., 154., 163., 112., 52., 126., 163.,
183., 165., 53., 136., 176., 184., 174., 51., 148., 173., 178.,
139., 160., 158., 147., 163., 154., 135., 146., 157., 181., 161.,
79., 39., 172., 187., 174., 45., 44., 187., 153., 173., 39., 46.,
187., 145., 160., 36., 38., 177., 155., 150., 37., 76., 165.,
195., 110., 100., 131., 180., 188., 184., 73., 146., 179., 193.,
183., 96., 117., 148., 146., 185., 97., 104., 147., 157., 174.,
172., 129., 171., 177., 181., 173., 123., 126., 186., 194., 171.,
91., 74., 109., 194., 145., 33., 117., 166., 180., 176., 35., 77.,
155., 152., 177. ]
但是将它乘以它的转置得到:
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. ]
的值是不对称的,他们怎么变得这么大是我不明白的?
cvmultranssed和cvGEMM给出的结果与上面复制的相同。cvMul给出一些运行时错误并返回垃圾值。有什么建议吗?
除了预期的大输出值(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是否确实如此…
我无法解释为什么不对称,但这些数字的大小是我所期望的。当你做矩阵乘法的时候你取第一行和第二列的内积。由于您的行有50个元素,并且您的元素在50-200范围内,因此输出矩阵中的元素将在50*100*100 = 500000左右。