3
我有三個矩陣在Matlab中,A是n x m,B是p x m,C是r x n。我可以在Matlab中快速執行以下操作嗎?
假設我們初始化使用一些矩陣:
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可以幫助,但不知道如何。