我在 Matlab 中有三个矩阵,A 是 nxm,B 是 pxm,C 是 rx n。
假设我们使用以下方法初始化一些矩阵:
A = rand(3,4);
B = rand(2,3);
C = rand(5,4);
以下两个是等价的:
>> s=0;
>> for i=1:3
for j=1:4
s = s + A(i,j)*B(:,i)*C(:,j)';
end;
end
>> s
s =
2.6823 2.2440 3.5056 2.0856 2.1551
2.0656 1.7310 2.6550 1.5767 1.6457
>> B*A*C'
ans =
2.6823 2.2440 3.5056 2.0856 2.1551
2.0656 1.7310 2.6550 1.5767 1.6457
后者效率更高。
我找不到以下循环变体的任何有效版本:
s=0;
for i=1:3
for j=1:4
x = A(i,j)*B(:,i)*C(:,j)';
s = s + x/sum(sum(x));
end;
end
在这里,被添加的矩阵在每一步之后通过它们的值的总和进行归一化。
有什么想法可以像上面的矩阵乘法一样提高效率吗?我想也许 accumarray 可以提供帮助,但不确定如何。