Count number of times value occurs

4 visualizaciones (últimos 30 días)
dan berkowitz
dan berkowitz el 12 de Oct. de 2018
Comentada: Bruno Luong el 6 de Jul. de 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

Respuesta aceptada

Bruno Luong
Bruno Luong el 12 de Oct. de 2018
Editada: Bruno Luong el 12 de Oct. de 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 comentarios
Benedict Greenwood
Benedict Greenwood el 6 de Jul. de 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
Bruno Luong el 6 de Jul. de 2021
The last line is needed in case your data is not consecutive integers 1, 2, 3 ...

Iniciar sesión para comentar.

Más respuestas (2)

Image Analyst
Image Analyst el 12 de Oct. de 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 comentario
Bruno Luong
Bruno Luong el 12 de Oct. de 2018
Editada: Bruno Luong el 12 de Oct. de 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.

Iniciar sesión para comentar.


Bruno Luong
Bruno Luong el 12 de Oct. de 2018
Editada: Bruno Luong el 12 de Oct. de 2018
Assume a and b are row vectors, and one of them is not too big
c = sum(a(:)==b,1)

Categorías

Más información sobre Histograms en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by