2017-05-02 1 views
2

두 행렬 AB이 다음과 같이 열 벡터로 구성되어 있다고 가정합니다.Matlab/Octave를 사용하여 두 행렬의 상응하는 열의 외부 곱을 벡터화합니다.

A = [a_1,a_2,...,a_N]; 
B = [b_1,b_2,...,b_N]; 

B. 여기에서 대응하는 컬럼에있는 모든 A 열의 외측 곱의 합 계산을 벡터화 할 수있는 방법이된다 내 비 벡터화 솔루션이다.

S = zeros(size(A,1), size(B,1)); 
for n=1:N 
    S = S + A(:,n)*B(:,n)'; % S = S + a_n * b_n' 
end 

모든 도움을 주시면 감사하겠습니다.

+0

이 어떤 언어를하고있는 의미? – ayhan

+0

이것은 Matlab입니다. 죄송합니다. 어떤 이유로 Matlab 특정 질문을위한 장소라고 생각했습니다. – Andrew

+0

문제 없습니다. 그 태그를 보는 사람들이 귀하의 질문을 볼 수 있도록 Matlab 용 태그를 추가하고 있습니다. – ayhan

답변

2

당신은 N이 무엇인지에 명확하지 않다,하지만 난 가정이 N = 열 벡터의 수 - 당신은 단순히 A *의 B '

A = rand(3,4); 
B = rand(3,4); 
N = size(A,2); 
S = zeros(size(A,1), size(B,1)); 
for n=1:N 
    S = S + A(:,n)*B(:,n)'; % S = S + a_n * b_n' 
end 
%Check that you are doing A*B' 
S == A*B' 
>> ans = 

1  1  1 
1  1  1 
1  1  1 
+0

아니요, A * B'는 내가 성취하고자하는 것과 같지 않아야합니다. 필자의 경우, A의 i 번째 열은 B의 i 번째 열만 곱해집니다. – Andrew

+0

@Andrew 어떻게 그렇지 않습니까? 나에게 그 예가 아니라는 것을 증명해주십시오. 나는 그 답안에서 그 모범을 사용하고 거의 500 배 빠른 결과를 얻었습니다. – GameOfThrows

+1

당신은 절대적으로 옳습니다. 나는 너무 당황 스럽다. – Andrew

관련 문제