how to remove zeros from the matrix?
Ältere Kommentare anzeigen
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 Kommentare
Turlough Hughes
am 25 Nov. 2019
Bearbeitet: Turlough Hughes
am 25 Nov. 2019
Do you always get n or n+1 zeros in a given row, and what do you mean by odd low?
Junseob Kim
am 25 Nov. 2019
Junseob Kim
am 25 Nov. 2019
James Tursa
am 25 Nov. 2019
Is it always the checkerboard pattern shown?
Junseob Kim
am 25 Nov. 2019
Akzeptierte Antwort
Weitere Antworten (3)
Guillaume
am 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 Kommentar
Junseob Kim
am 25 Nov. 2019
Adam Danz
am 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 Kommentar
Junseob Kim
am 25 Nov. 2019
Kaspar Bachmann
am 25 Nov. 2019
Bearbeitet: Kaspar Bachmann
am 25 Nov. 2019
1 Stimme
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 Kommentar
Junseob Kim
am 25 Nov. 2019
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!