Count number of times value occurs

1 次查看(过去 30 天)
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

采纳的回答

Bruno Luong
Bruno Luong 2018-10-12
编辑:Bruno Luong 2018-10-12
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 个评论
Benedict Greenwood
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 2021-7-6
The last line is needed in case your data is not consecutive integers 1, 2, 3 ...

请先登录,再进行评论。

更多回答(2 个)

Image Analyst
Image Analyst 2018-10-12
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 个评论
Bruno Luong
Bruno Luong 2018-10-12
编辑:Bruno Luong 2018-10-12
@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
Bruno Luong 2018-10-12
编辑:Bruno Luong 2018-10-12
Assume a and b are row vectors, and one of them is not too big
c = sum(a(:)==b,1)

类别

Help CenterFile Exchange 中查找有关 Histograms 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by