【发布时间】:2012-10-02 21:49:02
【问题描述】:
我是 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 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 的适当映射。
是否可以对这个循环进行矢量化?
【问题讨论】:
标签: matlab vectorization
我想是的,按照这个例子:
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);
【讨论】:
indexB 和索引向量 [1:n]用于 A.x.显然,索引所指的元素需要存在。