2012-10-02 37 views
5

我是Matlab新手,所以我不確定這是否可行。我有一個簡單的for循環:如何向自定義索引進行矢量化循環

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

凡A.x和B.x是長度爲n的兩個向量,並indexB是長度爲n的矢量,其中包含從在A.x元素B.x.適當的映射

是否可以矢量化這個循環?

回答

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

是的,但在左右兩個索引之間必須有一對一的映射關係,或者在這種情況下,用於B.x的索引向量indexB和用於A.x的索引向量[1:n]。顯然,指數所指的要素必須存在。 – Maurits