use*_*011 6 matlab matrix vectorization matrix-multiplication
我有两个矩阵:
A = [1 2;
3 4;
5 6]
B = A'
Run Code Online (Sandbox Code Playgroud)
乘法应该采用从两者中提取行和列向量的方式.
C = B(:,i) * A(i,:)这样,对于第一个实例(第1行和第1列),结果将是:
[1 2;
2 4]
Run Code Online (Sandbox Code Playgroud)
这将被垂直总结以获得[3 6].这笔款项将给出最终答案9.同样,如果矩阵尺寸较大,则第2行和第2列,第3行和第3列等.
此最终标量值将用于比较哪一行及其相应列具有高产量.
您所需的结果实际上在数学上等同于:
sum(A,2).^2 %or sum(A,2) .* sum(A,2)
Run Code Online (Sandbox Code Playgroud)
如果A并B没有转相互则:
sum(A,2).* sum(B,1).'
Run Code Online (Sandbox Code Playgroud)
您可以使用sum:
result = sum(bsxfun(@times,sum(A,2), B.'),2);
Run Code Online (Sandbox Code Playgroud)
或者在最新版本的 MATLAB 中您可以编写:
result = sum(sum(A,2).*B.',2)
Run Code Online (Sandbox Code Playgroud)
之前的回答:
您可以使用排列:
result = sum(reshape(permute(A,[2 3 1]) .* permute(A,[3 2 1]),[],size(A,1)));
Run Code Online (Sandbox Code Playgroud)
A或者在和的情况下B:
result = sum(reshape(permute(B,[1 3 2]) .* permute(A,[3 2 1]),[],size(A,1)));
result = [9 49 121]
Run Code Online (Sandbox Code Playgroud)
感谢@TommasoBelluzzo 和@SardarUsama。