How to obtain total sum by group
Afficher commentaires plus anciens
Hi, Could someone explain how to compute the total sum by group (without using for loop)?
A example is: groupid = [1; 1; 1; 2; 2; 3; 3;3]; value=[1;2;3;4;5;6;7;8]. the desired result is: runsum = [6;6;6;9;9; 21;21;21].
I am trying to get the result without using loop. Can "accumarray" do this?
Thanks a lot
Siying
Réponse acceptée
Plus de réponses (2)
jgg
le 18 Déc 2015
Yes. This should work; it's probably not the shortest way to do it, but it avoids looping.
key = unique(groupid);
tsum = accumarray(groupid,value);
[~,idx] = ismember(groupid,key);
runsum = tsum(idx);
Walter Roberson
le 18 Déc 2015
group_sum = accumarray(groupid, value);
runsum = group_sum(A);
Your question reminds me of the similar http://uk.mathworks.com/matlabcentral/answers/260501-unique-and-min-by-index
1 commentaire
Siying Liu
le 18 Déc 2015
Catégories
En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!