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.适当的映射
是否可以矢量化这个循环?
我是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.适当的映射
是否可以矢量化这个循环?
我是这么认为的,下面这个例子:
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);
如果A和B的长度不一样,这仍然可以吗? –
是的,但在左右两个索引之间必须有一对一的映射关系,或者在这种情况下,用于B.x的索引向量indexB和用于A.x的索引向量[1:n]。显然,指数所指的要素必须存在。 – Maurits