MATLAB中整数值矩阵的乘法

MRo*_*lin 6 matlab matrix matrix-multiplication

在MATLAB中乘以整数值矩阵的最佳方法是什么?

我很惊讶地发现以下行为不被接受:

>> x = int64([1, 2])
>> x * x'
Error using  * 
MTIMES is not fully supported for integer classes. At least one input must be scalar.
To compute elementwise TIMES, use TIMES (.*) instead.
Run Code Online (Sandbox Code Playgroud)

我总是可以转换成双倍然后再回来.这是最好的解决方案吗?我正在使用R2013b.

Lui*_*ndo 5

在这种简单的情况下,您可以使用

sum(x.*x)
Run Code Online (Sandbox Code Playgroud)

似乎times.*)支持整数矩阵,尽管mtimes*)不支持。

对于一般的矩阵乘法:让A并且B是两个具有适当大小的矩阵,以便A*B存在。由于timessum支持整数,因此您可以使用bsxfunsum来计算乘积矩阵的所有条目,从而推广上述技巧,如下所示。

编辑:正如@July所指出的那样,您需要'native'标记sum以便保留整数类型的结果。也感谢您指出了由引起的问题squeeze,现在通过使用第二个问题进行了纠正permute

permute(sum(bsxfun(@times, A.', permute(B, [1 3 2])), 1, 'native'), [2 3 1])
Run Code Online (Sandbox Code Playgroud)

例如:

>> 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
Run Code Online (Sandbox Code Playgroud)

无论如何,最快的选择似乎是double(A)*double(B)