Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

How do I exclude zeros from a matrix?

Asked by cfjunior

cfjunior (view profile)

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]

?

1 Comment

cfjunior

cfjunior (view profile)

on 29 Apr 2013

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

cfjunior

cfjunior (view profile)

Products

No products are associated with this question.

2 Answers

Answer by Andrei Bobrov

Andrei Bobrov (view profile)

on 29 Apr 2013
Edited by Andrei Bobrov

Andrei Bobrov (view profile)

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.';

1 Comment

cfjunior

cfjunior (view profile)

on 29 Apr 2013

thank you

Andrei Bobrov

Andrei Bobrov (view profile)

Answer by Zhang lu

Zhang lu (view profile)

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

0 Comments

Zhang lu

Zhang lu (view profile)

Contact us