How to retain only the rows of a matrix based on the unique numbers in the first column of the matrix?

5 views (last 30 days)
Hello guys Say that a=[1 3 3; 1 4 3; 2 4 3; 2 5 2; 2 4 2; 3 2 1; 4 3 4; 4 3 2] I need to keep the rows where I have only unique numbers in the first column of the matrix. That means I want to have this matrix a= [1 3 3; 2 4 3; 3 2 1; 4 3 4]. Or I also need to get [1 4 3; 2 4 2; 3 2 1; 4 3 2]. That means retaining the last unique row (based on only the first column) instead of the first. Are they possible? please help.
Kind regards
Sayeed

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 22 Apr 2014
Edited: Azzi Abdelmalek on 22 Apr 2014
[ii,jj,kk]=unique(a(:,1),'stable');
out1=a(jj,:)
out2=cell2mat(accumarray(kk,1:numel(kk),[],@(x) {a(max(x),:)}));
  1 Comment
Mohammad Sayeed
Mohammad Sayeed on 22 Apr 2014
Dear Brother It was just perfect! Thank you very much for your kind solution. By applying your codes, I have got both the matrix that I was looking for. Thanks again.
Sayeed

Sign in to comment.

More Answers (1)

Andrei Bobrov
Andrei Bobrov on 22 Apr 2014
Edited: Andrei Bobrov on 22 Apr 2014
[~,b] = unique(a(:,1),'first');
out1 = a(b,:);
out2 = a([b(2:end)-1;size(a,1)],:);
or
[~,b1] = unique(a(:,1),'first');
[~,b2] = unique(a(:,1),'last');
out1 = a(b1,:);
out2 = a(b2,:);

Categories

Find more on Multidimensional Arrays 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!