How can I count the number of elements of a given value in a matrix?
Does anyone know how to count the number of times a value appears in a matrix?
For example, if I have a 1500 x 1 matrix M
(vector) which stores the values of weekdays (1 - 7), how could I count how many Sundays (1), Mondays(2), ... , Saturdays(7) are stored in M
?
Solution 1:
Have a look at Determine and count unique values of an array.
Or, to count the number of occurrences of 5
, simply do
sum(your_matrix == 5)
Solution 2:
Here's a list of all the ways I could think of to counting unique elements:
M = randi([1 7], [1500 1]);
Option 1: tabulate
t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);
Option 2: hist/histc
counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );
Option 3: accumarray
counts3 = accumarray(M, ones(size(M)), [], @sum);
%# or simply: accumarray(M, 1);
Option 4: sort/diff
[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);
Option 5: arrayfun
counts5 = arrayfun( @(x)sum(M==x), unique(M) );
Option 6: bsxfun
counts6 = sum( bsxfun(@eq, M, unique(M)') )';
Option 7: sparse
counts7 = full(sparse(M,1,1));
Solution 3:
One way you can perform this operation for all the values 1 through 7 at once is to use the function ACCUMARRAY:
>> M = randi(7,1500,1); %# Some random sample data with the values 1 through 7
>> dayCounts = accumarray(M,1) %# Will return a 7-by-1 vector
dayCounts =
218 %# Number of Sundays
200 %# Number of Mondays
213 %# Number of Tuesdays
220 %# Number of Wednesdays
234 %# Number of Thursdays
219 %# Number of Fridays
196 %# Number of Saturdays
Solution 4:
assume w contains week numbers ([1:7])
n = histc(M,w)
if you do not know the range of numbers in M:
n = histc(M,unique(M))
It is such as a SQL Group by command!
Solution 5:
this would be perfect cause we are doing operation on matrix, and the answer should be a single number
sum(sum(matrix==value))