How to filter the rows i donot want in a matrix

4 views (last 30 days)
there is a matrix like
A=[ 0 1 0;
0 2 0;
1 0 0;
1 0 1];
compering A(1,:) and A(2,:), i choose [0 2 0];compering A(3,:) and A(4,:), i choose [1 0 1].
the final matrix i want is
A=[ 0 2 0;
1 0 1];
This is just a simple example, if the matrix is M*N, how to use matlab code to get the matrix i want.
  6 Comments
valley
valley on 2 Apr 2014
Edited: valley on 2 Apr 2014
i did, to this given example, it is ok, but to more complecated cases, such as a big matrix(600*10), it is not successful. m i correct, ur code didnot compare all the rest rows, just check the first row which matches the condition, to the other possible rows urs didnot consider?
sorry to trouble u again, still this problem, with 2 loops will cost much runtime, is there any other efficient way to solve my problem? if u have any idea about that pl tell me, thank u very much.

Sign in to comment.

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 2 Apr 2014
Edited: Azzi Abdelmalek on 3 Apr 2014
Edit
A=[1 1 0;0 2 0;1 0 0;1 0 1]
n=size(A,1);
k=1;
while k<n
if any(all(bsxfun(@le,A(k,:),A(k+1:end,:)),2))
A(k,:)=[];
k=k-1;
end
k=k+1;
n=size(A,1);
end
A
  7 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 2 Apr 2014
Try this
n=size(A,1);
k=1;
while k<n
if any(all(bsxfun(@le,A(k,:),A(k+1:end,:)),2))
A(k,:)=[];
k=k-1;
end
k=k+1;
n=size(A,1);
end
A

Sign in to comment.

More Answers (1)

Andrei Bobrov
Andrei Bobrov on 2 Apr 2014
Edited: Andrei Bobrov on 3 Apr 2014
blockproc(A,[2,3],@(x)max(x.data))
ADD after Valley's comment
cell2mat(accumarray...
(cumsum([true;diff(A(:,1))~=0]),(1:size(A,1))',[],@(x){max(A(x,:),[],1)}))
other variant
out = A(~any(triu(squeeze(all(bsxfun(@ge,A,reshape(A',1,size(A,2),[])),2)),1)),:)
  1 Comment
valley
valley on 2 Apr 2014
thx and sorry 4 the late reply, i've fixed my problem wit 2 loops, but urs seems more efficient, i will try later. thank u

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!