Asked by cfjunior
on 29 Apr 2013

How do I exclude zeros from a matrix and create a new matrix? For example:

A = [1 2 0 3 0 4 5 0; 7 0 0 0 2 3 4 1] and I want

A = [1 2 3 4 5 0 0 0; 7 2 3 4 1 0 0 0]

?

*No products are associated with this question.*

Answer by Andrei Bobrov
on 29 Apr 2013

Edited by Andrei Bobrov
on 29 Apr 2013

Accepted answer

s = size(A); A1 = zeros(s); for j1 = 1:s(1) A1(j1,1:nnz(A(j1,:))) = nonzeros(A(j1,:)); end

other variant:

At = A.'; i1 = sum(At~=0); s = size(At); A1 = zeros(size(At)); A1(sub2ind(s,i1,1:s(2))) = 1; out = zeros(s); out(flipud(cumsum(flipud(A1)))>0) = At(At ~= 0); out = out.';

Answer by Zhang lu
on 29 Apr 2013

You just show an simple matrix , which has the same zeros in each row. So,if you matirx is this case, the code as first one. else, you can try the second code.

clear all clc A =[ 1 2 0 3 0 4 5 0 7 0 0 0 2 3 4 1]; A=A'; New_A=reshape(A(A~=0),[],size(A,2))'; New_A(:,size(A,1))=0

clear all clc A =[ 1 2 0 3 0 4 5 0 7 0 0 0 2 3 4 1 1 5 6 5 5 0 0 3]; [m,n]=size(A); for i=1:m B=A(i,A(i,:)~=0); New_A(i,1:length(B))=B; end New_A(i,n)=0

Opportunities for recent engineering grads.

## 1 Comment

## cfjunior (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/73922#comment_146035

Actualy I want to move all zeros to the end of each column