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