如何使用自定义索引对循环进行矢量化



我是Matlab的新手,所以我不确定这是否可能。我有一个简单的 for 循环:

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

其中 A.x 和 B.x 是长度为 n 的两个向量,索引 B 是长度为 n 的向量,其中包含从 A.x 中的元素到 B.x 的适当映射。

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

我想是的,按照这个例子:

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);

最新更新