2012-10-02 20 views
5

私はMatlabを初めて使うので、これが可能かどうかはわかりません。私は、単純を有するforループ:A.xとB.xは、長さnの二つのベクトルであり、およびindexBはB.x.にA.xの要素から適切なマッピングを含む長さnのベクトルであるカスタムインデックスを使用してforループをベクトル化する方法

for i=1:n 
    B.x(indexB(i)) += A.x(i); 
end 

このループをベクトル化できますか?

私はこの例に続いて、そう思う

答えて

8

:与えるべき

a = [1 2 3 4 5]; 
b = a; 
idx = [5 4 3 2 1]; 
a(idx) = a(idx) + b(1:5); 

a = 

6  6  6  6  6 

をだからあなたの場合には、indexBはあなたが書くことができますnサイズがある場合:

B.x(indexB) = B.x(indexB) + A.x(1:n); 

その他:

B.x(indexB(1:n)) = B.x(indexB(1:n)) + A.x(1:n); 
+0

AとBの両方が同じ長さでない場合でもこれは機能しますか? –

+0

はい、ただし、左右のインデックス間に1対1のマッピングが必要です。この場合、B.xに使用されるインデックスベクトル 'indexB'とA.xに使用されるインデックスベクトル' [1:n] 'が必要です。そして明らかに、指数が参照する要素は、存在する必要があります。 – Maurits

関連する問題