如何编码这个矩阵乘法?

问题描述 投票:6回答:3

我有两个矩阵:

A = [1 2; 
     3 4; 
     5 6] 

B = A'

乘法应该采用从两者中提取行和列向量的方式。 C = B(:,i) * A(i,:)这样,对于第一个实例(第1行和第1列),结果将是:

[1 2; 
 2 4]

这将被垂直总结以获得[3 6]。这笔款项将给出最终答案9。同样,如果矩阵尺寸较大,则第2行和第2列,第3行和第3列等。

此最终标量值将用于比较哪一行及其相应列具有高产量。

matlab matrix vectorization matrix-multiplication
3个回答
3
投票

你可以使用sum

result = sum(bsxfun(@times,sum(A,2), B.'),2);

或者在最新版本的MATLAB中,您可以编写:

result = sum(sum(A,2).*B.',2)

上一个答案:

你可以使用permute

result = sum(reshape(permute(A,[2 3 1]) .* permute(A,[3 2 1]),[],size(A,1)));

或者在AB的情况下:

result = sum(reshape(permute(B,[1 3 2]) .* permute(A,[3 2 1]),[],size(A,1)));

result = [9 49 121]

感谢@TommasoBelluzzo和@SardarUsama。


7
投票

您所需的结果实际上在数学上等同于:

sum(A,2).^2   %or  sum(A,2) .* sum(A,2) 

如果AB没有相互转置,那么:

sum(A,2).* sum(B,1).' 

2
投票

如果你的矩阵是大小Nx2,那么一个可能的答案是

A.*A * [1;1] + 2*A(:,1).*A(:,2)
© www.soinside.com 2019 - 2024. All rights reserved.