Count number of times value occurs

조회 수: 7 (최근 30일)
dan berkowitz
dan berkowitz 2018년 10월 12일
댓글: Bruno Luong 2021년 7월 6일
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
Benedict Greenwood 2021년 7월 6일
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