Loop-free histogramming of each column of an input matrix

3 vues (au cours des 30 derniers jours)
Matt J
Matt J le 5 Mar 2022
Commenté : Matt J le 6 Mar 2022
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?

Réponse acceptée

Dave B
Dave B le 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 commentaire
Matt J
Matt J le 6 Mar 2022
Yep. That works. Too bad about the extra memory allocation required with ones(N).*(1:N)

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by