2017-05-02 8 views
2

2つの行列ABが次のように列ベクトルで構成されているとします。Matlab/Octaveを使用して2つの行列の対応する列の外積の合計をベクトル化する

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 =列ベクトルの数 - あなたは、単に*の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

関連する問題