[Matlab] Comment puis-je compter le nombre d'éléments d'une valeur donnée dans une matrice?


Answers

Voici une liste de toutes les façons dont je pourrais penser à compter des éléments uniques:

M = randi([1 7], [1500 1]);

Option 1: tabuler

t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);

Option 2: hist / histc

counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );

Option 3: accumarray

counts3 = accumarray(M, ones(size(M)), [], @sum);
%# or simply: accumarray(M, 1);

Option 4: trier / diff

[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);

Option 5: arrayfun

counts5 = arrayfun( @(x)sum(M==x), unique(M) );

Option 6: bsxfun

counts6 = sum( bsxfun(@eq, M, unique(M)') )';

Option 7: éparse

counts7 = full(sparse(M,1,1));
Question

Est-ce que quelqu'un sait comment compter le nombre de fois qu'une valeur apparaît dans une matrice?

Par exemple, si j'ai une matrice M (vecteur) de 1500 x 1 qui stocke les valeurs des jours de la semaine (1 - 7), comment pourrais-je compter combien de dimanches (1), lundis (2), ..., samedis (7 ) sont stockés dans M ?




supposons que w contient des numéros de semaine ([1: 7])

n = histc(M,w)

si vous ne connaissez pas la plage de nombres dans M:

n = histc(M,unique(M))

C'est comme un groupe SQL par commande!




C'est un très bon fichier de fonction disponible sur Matlab Central File Exchange.

countmember.m lien

Ce fichier de fonction est totalement vectorisé et donc très rapide. De plus, par rapport à la fonction référencée dans la réponse d'aioobe, cette fonction n'utilise pas la fonction accumarray, ce qui est même compatible avec les anciennes versions de Matlab. En outre, il fonctionne pour les tableaux de cellules ainsi que les tableaux numériques.

SOLUTION: Vous pouvez utiliser cette fonction conjointement avec la fonction matlab intégrée, "unique".

occurance_count = countmember (unique (M), M)

occurance_count sera un tableau numérique de la même taille que celui de unique (M) et les différentes valeurs du tableau occurance_count correspondront au nombre de valeurs correspondantes (même index) en unique (M).