how to remove zeros from the matrix?
130 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
the cyclist
2019-11-25
编辑:the cyclist
2019-11-25
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)) = [];
更多回答(3 个)
Guillaume
2019-11-25
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)).'
Adam Danz
2019-11-25
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)).';
Kaspar Bachmann
2019-11-25
编辑:Kaspar Bachmann
2019-11-25
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!