Path: news.mathworks.com!not-for-mail From: <HIDDEN> Newsgroups: comp.soft-sys.matlab Subject: Cancelling matrix rows Date: Sun, 14 Apr 2013 21:15:16 +0000 (UTC) Organization: The MathWorks, Inc. Lines: 33 Message-ID: <kkf694$ddd$1@newscl01ah.mathworks.com> Reply-To: <HIDDEN> NNTP-Posting-Host: www-01-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: newscl01ah.mathworks.com 1365974116 13741 172.30.248.46 (14 Apr 2013 21:15:16 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Sun, 14 Apr 2013 21:15:16 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 4216716 Xref: news.mathworks.com comp.soft-sys.matlab:793505 I'm after a way of cancelling "non minimal" rows of a matrix which contain all the non zero terms of a previous row plus more. For example a=[ 1, 2, 0; 3, 4, 5; 1, 2, 6] Row 3 of 'a' should be cancelled as a row containing only the values 1 and 2 exists above it. My current coding uses a for loop to compare each row to every other row using an 'ismember' or all the non zero terms in that row. Any other row that returns a true is member statement is deleted. However the final problem has the potential to have over a million rows meaning this for loop takes an unfeasible amount of time to run. Does anyone have any ideas on how to speed this process up or take a different approach? Once sorted into ascending order of number of non zero terms my current coding is: for R=1:N; %Selects row of matrix WF=Phases_Final(R,:); TF=WF(WF~=0); %Produces array of non zero terms in row for X=(R+1):N; %Compares above row to all rows below in the sorted matrix if ismember([TF(1,:)],Phases_Final(X,:))==[(ones(1,size(TF,2)))]; Phases_Final(X,:)=[]; else end end end . Any help is appreciated. Regards, Jon