Borrar filtros
Borrar filtros

How do I exclude zeros from a matrix?

1 visualización (últimos 30 días)
cfjunior
cfjunior el 29 de Abr. de 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 comentario
cfjunior
cfjunior el 29 de Abr. de 2013
Actualy I want to move all zeros to the end of each column

Iniciar sesión para comentar.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 29 de Abr. de 2013
Editada: Andrei Bobrov el 29 de Abr. de 2013
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.';

Más respuestas (1)

Zhang lu
Zhang lu el 29 de Abr. de 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

Categorías

Más información sobre Programming en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by