Count number of times value appears in column

23 vues (au cours des 30 derniers jours)
Emma Kuttler
Emma Kuttler le 22 Nov 2019
Modifié(e) : Image Analyst le 23 Nov 2019
I have a 1000x296 matrix called FinalRanking. The possible values in each cell are between 1 and 296, integers.
I want to count the number of times each number, 1-296, appears in each column, and return this as a 296x296 matrix, lets call it counter.
so for example Counter(1,1) has the value of the number of time 1 appears in Column 1 of FinalRanking.
or Counter(12, 57) returns the value of the number of times 12 appears in Column 57 of FinalRanking.
How would I do this? I'm assuming i need nested for loops. Thanks!

Réponse acceptée

the cyclist
the cyclist le 22 Nov 2019
Modifié(e) : the cyclist le 22 Nov 2019
% Parameterize the max value, for convenience
V = 296;
% Some simulated data
FinalRanking = randi(V,1000,V);
% Preallocate the counter array
counter = nan(V,V);
% Loop over the columns, and count the number of times each value appears
for nc = 1:V
counter(:,nc) = histcounts(FinalRanking(:,nc),[1:V Inf]);
end
  1 commentaire
Emma Kuttler
Emma Kuttler le 22 Nov 2019
This works perfectly, thank you!

Connectez-vous pour commenter.

Plus de réponses (2)

Andrei Bobrov
Andrei Bobrov le 22 Nov 2019
Modifié(e) : Andrei Bobrov le 22 Nov 2019
out = histc(FinalRanking,1:296);
  4 commentaires
Andrei Bobrov
Andrei Bobrov le 22 Nov 2019
"If performance is a problem due to a large number of columns in the matrix, then consider continuing to use histc for the column-wise bin counts." - wrote The Mathworks.
the cyclist
the cyclist le 23 Nov 2019
Make up your mind, MathWorks! :-)

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 22 Nov 2019
Try this:
edges = 1 : 297;
FinalRanking = randi(296, 1000, 296);
counter = zeros(296, 296);
for col = 1 : size(FinalRanking, 2)
counter(:, col) = histcounts(FinalRanking(:, col), edges);
end
imshow(counter, [], 'ColorMap', hsv(256));
axis('on', 'image');
colorbar;
impixelinfo;
  2 commentaires
Emma Kuttler
Emma Kuttler le 23 Nov 2019
This is interesting! I'm guessing the x axis represents the column and y represents the number of occurences? If so, how do i modify the code to add axis labels?
Image Analyst
Image Analyst le 23 Nov 2019
Modifié(e) : Image Analyst le 23 Nov 2019
Yes for x. But along the y axis are the histogram bins. The value, "z" value if you want to think of it like that, is the count. But the actual distance/location along the y axis is the bin number, not the "number of occurrences" (counts).
fontSize = 20; % Whatever.
xlabel('Column', 'FontSize', fontSize);
ylabel('Number (i.e., histogram bin)', 'FontSize', fontSize);

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by