how to remove zeros from the matrix?

198 vues (au cours des 30 derniers jours)
Junseob Kim
Junseob Kim le 25 Nov 2019
Commenté : Junseob Kim le 25 Nov 2019
Hello, I want to remove zero values from the matrix and cut the last elements of odd rows. For example, if I have a matrix
A=[1, 0, 2, 0, 3 ;
0, 4, 0, 5, 0 ;
6, 0, 7, 0, 8]
and, I want to make matrix like
B=[1, 2;
4, 5;
6, 7]
Please answer this question. Thanks!
  5 commentaires
James Tursa
James Tursa le 25 Nov 2019
Is it always the checkerboard pattern shown?
Junseob Kim
Junseob Kim le 25 Nov 2019
Yes it is.

Connectez-vous pour commenter.

Réponse acceptée

the cyclist
the cyclist le 25 Nov 2019
Modifié(e) : the cyclist le 25 Nov 2019
I think this does what you want:
% Replicate A into B
B = A;
% For the even-numbered rows, circularly shift the elements
B(2:2:end,:) = circshift(B(2:2:end,:),-1,2);
% Remove any columnn with a zero
B(:,any(B==0)) = [];
  1 commentaire
Junseob Kim
Junseob Kim le 25 Nov 2019
Thank you so much!!

Connectez-vous pour commenter.

Plus de réponses (3)

Guillaume
Guillaume le 25 Nov 2019
A=[1, 0, 2, 0, 3 ;
0, 4, 0, 5, 0 ;
6, 0, 7, 0, 8];
B = reshape(nonzeros(A(:, 1:end-1).'), [], size(A, 1)).'
  1 commentaire
Junseob Kim
Junseob Kim le 25 Nov 2019
Thank you so much!!

Connectez-vous pour commenter.


Adam Danz
Adam Danz le 25 Nov 2019
This approach extracts the first two non-zero elements per row. If there are no two non-zero elements in each row an error is thrown.
A=[
1, 0, 2, 0, 3 ;
0, 4, 0, 5, 0 ;
6, 0, 7, 0, 8];
B=[1, 2;
4, 5;
6, 7];
% Number of non-zeros per row or A
numNonZeros = sum(A~=0,2);
% Replace the non-zeros after the 2nd non-zero in
% each row with 0s
A(cumsum(A~=0,2) > 2) = 0;
% Confirm that we end up with 2 non-0s in each row
if (unique(sum(A~=0,2))>0) ~= true
error('Assumption violation: the number of non-zeros in each row of A is unexpected.')
end
A = A.';
B = reshape(A(A~=0),2,size(A,2)).';
  1 commentaire
Junseob Kim
Junseob Kim le 25 Nov 2019
Thank you so much!!

Connectez-vous pour commenter.


Kaspar Bachmann
Kaspar Bachmann le 25 Nov 2019
Modifié(e) : Kaspar Bachmann le 25 Nov 2019
A=[1, 0, 2, 0, 3 ; 0, 4, 0, 5, 0 ; 6, 0, 7, 0, 8]
Var = A;
Var(:,length(Var)) = [];
for i = 1:size(Var,1)
t = Var(i,:);
idx = find(t>0);
B(i,:) = t(idx);
end
Its a bit messy, but it should work.
  1 commentaire
Junseob Kim
Junseob Kim le 25 Nov 2019
Thank you so much!!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by