在这种简单情况下,你可以使用以下方法。
sum(x.*x)
看起来对于整数矩阵,times
(.*
) 能够被正确支持,虽然 mtimes
( *
) 不行。
对于一般的矩阵乘法:设 A
和 B
是两个大小适当的矩阵,使得 A*B
存在。由于整数支持 times
和 sum
,可以使用 bsxfun
和 sum
来计算乘积矩阵的所有元素,如下所示。
编辑:正如@July所指出的那样,你需要在 sum
中加上 'native'
标志才能保持结果为整数类型。也感谢指出由 squeeze
导致的问题,现在通过使用第二个 permute
进行修正。
permute(sum(bsxfun(@times, A.', permute(B, [1 3 2])), 1, 'native'), [2 3 1])
例如:
>> A = int64([1 2; 3 4])
A =
1 2
3 4
>> B = int64([5 7 9; 6 8 10])
B =
5 7 9
6 8 10
>> permute(sum(bsxfun(@times, A.', permute(B, [1 3 2])), 'native'), [2 3 1])
ans =
17 23 29
39 53 67
无论如何,最快的替代方法似乎是
double(A)*double(B)
。
mtimes
处理uint8
之前实现某种警告或溢出检测。 - chappjc