## Friday, June 21, 2013

### Count the frequency of elements in a vector or matrix- part 3

##### Option 5: arrayfun
counts5 = arrayfun( @(x)sum(M==x), unique(M) );
A = arrayfun(fun, S) applies the function specified by fun to each element of array S, and returns the results in array A.” This approach is quite straightforward. The following is an example.
M = [1; 2; 6; 2; 6];
counts5 = arrayfun( @(x)sum(M==x), unique(M) )

counts5 =

1
2
2

##### Option 6: bsxfun
counts6 = sum( bsxfun(@eq, M, unique(M)') )';
The function “bsxfun” applies element-by-element binary operation to two arrays. Though this method is not hard, but it is easier to understand if we do it step by step.
M = [1; 2; 6; 2; 6];
unique(M)'

ans =

1     2     6

bsxfun(@eq, M, unique(M)')

ans =

1     0     0
0     1     0
0     0     1
0     1     0
0     0     1

counts6 = sum( bsxfun(@eq, M, unique(M)') )'

counts6 =

1
2
2

##### Option 7: sparse
counts7 = full(sparse(M,1,1));

Again, for this approach, we need to check the MATLAB help file first. “S = sparse(i,j,s,m,n,nzmax) uses vectors i, j, and s to generate an m-by-n sparse matrix such that S(i(k),j(k)) = s(k), with space allocated for nzmax nonzeros. Vectors i, j, and s are all the same length. Any elements of s that are zero are ignored, along with the corresponding values of i and j. Any elements of s that have duplicate values of i and j are added together.” An example is given below.

sparse(M,1,1)

ans =

(1,1)        1
(2,1)        2
(6,1)        2

counts7 = full(sparse(M,1,1))

counts7 =

1
2
0
0
0
2

Part 1: http://nw360.blogspot.com.au/2013/06/count-number-of-elements-in-vector-or.html
Part 2: http://nw360.blogspot.com.au/2013/06/count-number-of-elements-in-vector-or_20.html
Part 3: http://nw360.blogspot.com.au/2013/06/count-number-of-elements-in-vector-or_21.html

References:
1 MATLAB help file.
2 http://stackoverflow.com/questions/2880933/how-can-i-count-the-number-of-elements-of-a-given-value-in-a-matrix