# How do I efficiently add values of same indices to a vector?

1 view (last 30 days)
Tzaki on 25 Jan 2022
Edited: Tzaki on 25 Jan 2022
Hello, I am pretty much new to MATLAB.
I have a large vector vec1=[2 7 4 3], a small vector vec2=[1 10 100], and an index vector ind=[1 2 1] (numel(vec2)=numel(idx)). I want to add each element of vec2 to the element of vec1 that is specified by ind. In this example, I want ans=[103 17 4 3].
Intuitively, I first tried
vec1(ind) = vec1(ind) + vec2, (1)
but this gave me ans=[102 17 4 3], telling me that the duplicates in ind were not considered.
To get around this, I added a for loop before (1) to remove the duplicates, which works fine but takes too long.
I would like to know if there is an efficient way to solve this.

Matt J on 25 Jan 2022
Edited: Matt J on 25 Jan 2022
vec1=vec1+accumarray(ind(:),vec2(:),size(vec1));
Tzaki on 25 Jan 2022
Thank you very much, It seems that yours works perfectly!

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by