how to calculate number of unique element in array?
    11 views (last 30 days)
  
       Show older comments
    
    Putri Basenda Tarigan
 on 22 Nov 2020
  
    
    
    
    
    Commented: Putri Basenda Tarigan
 on 22 Nov 2020
            Hi all.
if I have matrix like:
c =
     1     1
     1     1
     1     1
     2     1
     2     2
     2     3
     2     4
     2     5
     2     5
     3     1
     3     1
     3     2
how can I calculate number of unique element in column 2 according to column 1?
for the above matrix, the result should be:
1  1
2  5
3  2
Thanks in advance
0 Comments
Accepted Answer
  Ameer Hamza
      
      
 on 22 Nov 2020
        
      Edited: Ameer Hamza
      
      
 on 22 Nov 2020
  
      Try splitapply()
c = [
     1     1
     1     1
     1     1
     2     1
     2     2
     2     3
     2     4
     2     5
     2     5
     3     1
     3     1
     3     2]
out = [unique(c(:,1)) ...
     splitapply(@(x) numel(unique(x)), c(:,2), c(:,1))]
or accumarray():
out = [unique(c(:,1)) ...
     accumarray(c(:,1), c(:,2), [], @(x) numel(unique(x)))];
And if the second column also contain all positive integers in increasing order then you can just try
out = [unique(c(:,1)) ...
     splitapply(@max, c(:,2), c(:,1))]
%
out = [unique(c(:,1)) ...
     accumarray(c(:,1), c(:,2), [], @max)];
More Answers (1)
  Bruno Luong
      
      
 on 22 Nov 2020
        
      Edited: Bruno Luong
      
      
 on 22 Nov 2020
  
      c =[
    1     1
    1     1
    1     1
    2     1
    2     2
    2     3
    2     4
    2     5
    2     5
    3     1
    3     1
    3     2 ]
d=unique(c,'rows');
c1=d(:,1);
i=find([true; diff(c1)~=0; true]);
count=diff(i);
c1=c1(i(1:end-1));
t=table(c1,count)
0 Comments
See Also
Categories
				Find more on Operators and Elementary Operations in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

