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 de 1500 x 1 M
(vecteur) qui stocke les valeurs des jours de la semaine (1 à 7), comment pourrais-je compter le nombre de dimanches (1), de lundis (2), .. ., Les samedis (7) sont stockés dans M
?
Regardez Déterminez et comptez les valeurs uniques d'un tablea .
Ou, compter le nombre d'occurrences de 5
, faites simplement
sum(your_matrix == 5)
Voici une liste de toutes les solutions possibles pour compter des éléments uniques:
M = randi([1 7], [1500 1]);
t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);
counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );
counts3 = accumarray(M, ones(size(M)), [], @sum);
%# or simply: accumarray(M, 1);
[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);
counts5 = arrayfun( @(x)sum(M==x), unique(M) );
counts6 = sum( bsxfun(@eq, M, unique(M)') )';
counts7 = full(sparse(M,1,1));
Une façon de réaliser cette opération pour toutes les valeurs 1 à 7 à la fois consiste à utiliser la fonction ACCUMARRAY :
>> M = randi(7,1500,1); %# Some random sample data with the values 1 through 7
>> dayCounts = accumarray(M,1) %# Will return a 7-by-1 vector
dayCounts =
218 %# Number of Sundays
200 %# Number of Mondays
213 %# Number of Tuesdays
220 %# Number of Wednesdays
234 %# Number of Thursdays
219 %# Number of Fridays
196 %# Number of Saturdays
supposons que w contient les numéros de semaine ([1: 7])
n = histc(M,w)
si vous ne connaissez pas la plage de nombres en M:
n = histc(M,unique(M))
C'est comme un groupe SQL par commande!
ce serait parfait parce que nous faisons l'opération sur la matrice, et la réponse devrait être un nombre unique
sum(sum(matrix==value))
C'est un très bon fichier de fonction disponible sur Matlab Central File Exchange.
Ce fichier de fonction est totalement vectorisé et donc très rapide. De plus, par rapport à la fonction mentionnée dans la réponse de aioobe, cette fonction n’utilise pas la fonction accumarray, ce qui explique pourquoi elle est même compatible avec les anciennes versions de Matlab. En outre, cela 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 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) dans unique (M).
Utilisez nnz au lieu de sum. Il n'est pas nécessaire que le double appel réduit les matrices en vecteurs et il est probablement plus rapide que sum.
nnz(your_matrix == 5)