Removing zero rows from a matrix

  • Thread starter Thread starter mikeph
  • Start date Start date
  • Tags Tags
    Matrix Zero
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
1 reply · 2K views
mikeph
Messages
1,229
Reaction score
18
say,

Code:
a = [1,2,3; 0,0,0; 0,4,5];

how can I remove the rows of a that contain only zeros?

I found a link which works, but I don't know why:
http://www.mathworks.in/matlabcentral/newsreader/view_thread/281578
Suggesting:
Code:
a(all(a==0,2),:)=[]

1. what does the "=[]" syntax do
2. can this method be used to generate a second matrix b = a(without any zero rows)? I tried re-writing in this form and it doesn't work:

Code:
>> b = a(all(a==0,2),:)
b =
     0     0     0

Clearly I'm missing something,
Thanks
 
Physics news on Phys.org
If you want something that's a bit less cryptic and a bit more transparent you could do it like this

Code:
k=0; rows=size(a)(1)
while (k<rows)
   k=k+1;
   if all(a(k,:)==0)
      a(k,:)=[];
      rows=rows-1;
   end
end

Note that you can't use a "for" loop because if a row is removed then it will reduce the size of the matrix, causing the for loop index to eventually exceed the size of the matrix. This problem of course only arises because you're processing the matrix "in place".

BTW, [] just represents an empty vector.
 
Last edited: