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

How do I exclude zeros from a matrix?

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]

?

1 Comment

cfjunior on 29 Apr 2013

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

cfjunior

Products

No products are associated with this question.

2 Answers

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

1 Comment

cfjunior on 29 Apr 2013

thank you

Andrei Bobrov
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

0 Comments

Zhang lu

Contact us