Effacer les filtres
Effacer les filtres

Count the number of same elements in an array

553 vues (au cours des 30 derniers jours)
luca
luca le 10 Sep 2019
Modifié(e) : Vitek Stepien le 14 Août 2021
Hi given a vector
V = [ 1 2 4 3 4 2 3 5 6 4 5 6 8 4 2 3 5 7 8 5 3 1 3 5 7 8 9 5 3 2 4 6 7 8]
I would like to count how many times the value 1,2,3,4,5,6,7,8,9 are repeated inside V, and obtain a vector that report this values:
C = [2 4 6 5 6 3 3 4 1]
where 1 is repeated 2 times, 2 is repetead 4 times, 3 is repeated 6 times and so on..

Réponse acceptée

madhan ravi
madhan ravi le 10 Sep 2019
Modifié(e) : madhan ravi le 10 Sep 2019
[~,~,ix] = unique(V);
C = accumarray(ix,1).'
  5 commentaires
Stephen23
Stephen23 le 10 Sep 2019
Modifié(e) : Stephen23 le 10 Sep 2019
@madhan ravi : this is really quite neat:
accumarray(V(:),1)
Simple idea which works well:
>> V = [2 2 3 4 5 6 7 7 8 8 9 9]
>> accumarray(V(:),1)
ans =
0
2
1
1
1
1
2
2
2
madhan ravi
madhan ravi le 10 Sep 2019
Thank you Stephen :) !

Connectez-vous pour commenter.

Plus de réponses (3)

Stephen23
Stephen23 le 10 Sep 2019
Modifié(e) : Stephen23 le 10 Sep 2019
Your 1st example:
>> V = [ 1 2 4 3 4 2 3 5 6 4 5 6 8 4 2 3 5 7 8 5 3 1 3 5 7 8 9 5 3 2 4 6 7 8];
>> C = hist(V,1:max(V))
C =
2 4 6 5 6 3 3 4 1
Your 2nd example:
>> V = [2 2 3 4 5 6 7 7 8 8 9 9]
>> C = hist(V,1:max(V))
C =
0 2 1 1 1 1 2 2 2

Vitek Stepien
Vitek Stepien le 14 Août 2021
Modifié(e) : Vitek Stepien le 14 Août 2021
I found this function extremely useful, and doing exactly what you need:
V = [ 1 2 4 3 4 2 3 5 6 4 5 6 8 4 2 3 5 7 8 5 3 1 3 5 7 8 9 5 3 2 4 6 7 8];
[gc,grps] = groupcounts(V'); % <- need column vector here
grps'
ans = 1×9
1 2 3 4 5 6 7 8 9
gc'
ans = 1×9
2 4 6 5 6 3 3 4 1
Where grps lists the unique values in order, and gc provides the count of each unique values found in v.
This is very similar to madhan ravi's accumarray, but even simpler.
P.S. I turned gc and grps into row vectors only for compactness of the post, it's purely aesthetical. However groupcounts requires a column vector, not a row.

Hugo Diaz
Hugo Diaz le 28 Nov 2020
I use sparse(V(:),V(:), 1) for large arrays with missing indices.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by