3
저는 Matlab에 3 개의 행렬을 가지고 있는데, 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
:
I는 루프의 다음 변형 예에 대한 효율적인 버전을 찾을 수 없다.
이 아이디어를 어떻게 위의 행렬 곱셈과 같이 효율적으로 만들 수 있습니까? 아마 accumarray가 도움이 될지도 모른다고 생각했지만 어떻게 확신 할 수 없었습니다.