Using SUM and UNIQUE to Count the Values ββof Values ββin a Subset of a Matrix
So, suppose such a matrix is:
20 2
20 2
30 2
30 1
40 1
40 1
I want to count the number of times 1 for each unique value of column 1. I could do it the long way [sum (x (1: 2,2) == 1)] for each value, but I think it would be ideal use for UNIQUE functions. How can I fix this to get output like this:
20 0
30 1
40 2
Sorry if the solution seems obvious, my understanding of loops is very poor.
+3
source to share
3 answers
A really unique option is a good option:
u=unique(x(:,1))
res=arrayfun(@(y)length(x(x(:,1)==y & x(:,2)==1)),u)
Separating this last line:
- arrayfun (fun, array) applies fun to each element of the array and puts it into a new array that it returns.
- This function is a function
@(y)length(x(x(:,1)==y & x(:,2)==1))
that finds the length of the part of x where a condition is metx(:,1)==y & x(:,2)==1)
(called boolean indexing). So for each of the unique elements, it finds a string in X, where the first is the unique element and the second is one.
+2
source to share
Try this (as pointed out in this answer ):
>>> [c,~,d] = unique(a(a(:,2)==1))
c =
30
40
d =
1
3
>>> counts = accumarray(d(:),1,[],@sum)
counts =
1
2
>>> res = [c,counts]
+1
source to share