Loop-free histogramming of each column of an input matrix

6 views (last 30 days)
Before there was histcounts(), we would use histc(), which is no longer recommended by TMW. But histc() could calculate the column-wise histogram of an input matrix,
A =[ 9 5 2 1 5 3 3 2 2 5
1 8 3 1 7 4 3 2 2 6
1 3 1 1 8 6 4 4 2 4
1 3 1 6 4 2 1 2 9 7
2 1 6 3 2 2 1 1 9 1
2 3 1 1 7 5 4 2 1 5
1 1 4 2 1 8 6 5 4 5];
H=histc(A,1:10)
H = 10×10
4 2 3 4 1 0 2 1 1 1 2 0 1 1 1 2 0 4 3 0 0 3 1 1 0 1 2 0 0 0 0 0 1 0 1 1 2 1 1 1 0 1 0 0 1 1 0 1 0 3 0 0 1 1 0 1 1 0 0 1 0 0 0 0 2 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
whereas histcounts does not seem to have this capability. Is there a replacement for this capability somewhere in modern Matlab, aside from an Mcoded for-loop?

Accepted Answer

Dave B
Dave B on 6 Mar 2022
This is somewhere between workaround and hack, but you could do it with histcounts2:
X=rand(5);
a=histcounts2(X,ones(5).*(1:5),linspace(0,1,10),.5:5.5);
b=histc(X,linspace(0,1,10));
isequal(a,b(1:end-1,:))
ans = logical
1
  1 Comment
Matt J
Matt J on 6 Mar 2022
Yep. That works. Too bad about the extra memory allocation required with ones(N).*(1:N)

Sign in to comment.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!