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

3 vues (au cours des 30 derniers jours)
Tzaki
Tzaki le 25 Jan 2022
Modifié(e) : Tzaki le 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.

Réponse acceptée

Matt J
Matt J le 25 Jan 2022
Modifié(e) : Matt J le 25 Jan 2022
vec1=vec1+accumarray(ind(:),vec2(:),size(vec1));
  1 commentaire
Tzaki
Tzaki le 25 Jan 2022
Thank you very much, It seems that yours works perfectly!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by