Count number of times value occurs
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
dan berkowitz
le 12 Oct 2018
Commenté : Bruno Luong
le 6 Juil 2021
Hi,
I have an array a = [ 1 2 3 2 2 3 1], and another array, b = [1:5].
How can I create an array c, that counts the number of times that each value in b occurs in a?
I want c = [2 3 2 0 0] (ie. 1/2/3/4/5 from b, appears 2/3/2/0/0 times in a)
Any help would be appreciated. Thanks,
DB
0 commentaires
Réponse acceptée
Bruno Luong
le 12 Oct 2018
Modifié(e) : Bruno Luong
le 12 Oct 2018
Method for large a and b
[u,~,j] = unique(b(:));
[b, i] = ismember(a(:),u);
c = accumarray(i(b),1,size(u));
c = c(j)'
3 commentaires
Benedict Greenwood
le 6 Juil 2021
Cheers Bruno great piece of code! Can I double-check why the bottom line is necessary? For my data the output is the same without the bottom line (although not transposed because of the apostrophe).
Bruno Luong
le 6 Juil 2021
The last line is needed in case your data is not consecutive integers 1, 2, 3 ...
Plus de réponses (2)
Image Analyst
le 12 Oct 2018
Yet another way to get the histogram is to use histcounts():
a = [ 1 2 3 2 2 3 1]
b = [1:5]
counts = histcounts(a, 'BinEdges', [b, inf])
1 commentaire
Bruno Luong
le 12 Oct 2018
Modifié(e) : Bruno Luong
le 12 Oct 2018
@Dan: double check if you really want IA's method, for example with
a = [2];
b = [1 3];
counts = histcounts(a, 'BinEdges', [b, inf])
> counts =
1 0
to me 1 and 3 from b appear 0 time in a.
Bruno Luong
le 12 Oct 2018
Modifié(e) : Bruno Luong
le 12 Oct 2018
Assume a and b are row vectors, and one of them is not too big
c = sum(a(:)==b,1)
0 commentaires
Voir également
Catégories
En savoir plus sur Histograms dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!