如何使用自定义索引向量化循环

时间:2012-10-02 21:49:02

标签: matlab vectorization

我是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中元素的适当映射。

是否可以对此循环进行矢量化?

1 个答案:

答案 0 :(得分: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);