sum of vector by group
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
i have a vector of numbers
a=[1 4 1 -3 -6 9 9 1 1 1 -1 -1 -4]
and i group them by their sign (i don't have zero, only positive and negative number); 3 positive, 2 negative, ext. so:
b=[3 2 5 3]
now i want to find the sum of each group:
res=[6 -9 21 -6]
how can i do it, without using a loop.
Note: the vector "a" can be empty, contain only positive number, only negative number, or both of them when the first number can be positive or negative. in any case it don't contain zeros.
Note2: the way i find "b" is:
b = diff([1 find(diff([0 sign(a)]==1)~=0) length(a)+1]);
b=b(b~=0);
0 Commenti
Risposta accettata
Sean de Wolski
il 3 Set 2014
Modificato: Sean de Wolski
il 3 Set 2014
a=[1 4 1 -3 -6 9 9 1 1 1 -1 -1 -4];
idx = cumsum([0 abs(diff(sign(a)))==2])+1;
res = accumarray(idx.',a.')
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!