2012-10-02 36 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