removing zeros from matrix
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi,
I have a matrix like this:
0 0 2 3 4 0;
1 0 2 0 0 1;
3 2 1 0 0 0;
0 1 0 3 0 1;
I want to remove the zeros so I could have something like this:
2 3 4;
1 2 1;
3 2 1;
1 3 1;
The number of zeros in each row of the original matrix is the same. Any idea how can I do this? Commands like A=A(A ~= 0) didn't work.
Thanks!
댓글 수: 0
채택된 답변
Roger Stafford
2016년 3월 17일
A = A.';
A = reshape(A(A~=0),3,4).';
댓글 수: 2
Image Analyst
2016년 3월 18일
Take it a step at a time and use intermediate variables and get rid of the semicolons so the result goes to the command window:
A=[0 0 2 3 4 0; 1 0 2 0 0 1; 3 2 1 0 0 0; 0 1 0 3 0 1]
Atransposed = A.'
vectorNoZeros = Atransposed(Atransposed ~= 0)
reshapedVector = reshape(vectorNoZeros,3,4).'
You'll see this, which hopefully explains it well enough:
A =
0 0 2 3 4 0
1 0 2 0 0 1
3 2 1 0 0 0
0 1 0 3 0 1
Atransposed =
0 1 3 0
0 0 2 1
2 2 1 0
3 0 0 3
4 0 0 0
0 1 0 1
vectorNoZeros =
2
3
4
1
2
1
3
2
1
1
3
1
reshapedVector =
2 3 4
1 2 1
3 2 1
1 3 1
추가 답변 (2개)
Azzi Abdelmalek
2016년 3월 17일
v=[0 0 2 3 4 0; 1 0 2 0 0 1; 3 2 1 0 0 0; 0 1 0 3 0 1]
out=reshape(v(v~=0),size(v,1),[])
댓글 수: 0
Image Analyst
2016년 3월 17일
This works:
A=[0 0 2 3 4 0; 1 0 2 0 0 1; 3 2 1 0 0 0; 0 1 0 3 0 1]
for row = 1 : size(A, 1)
thisRow = A(row,:)
% Remove zeros
thisRow(thisRow == 0) = [];
% Append to new matrix.
if row == 1
Anozeros = thisRow
else
Anozeros = [Anozeros; thisRow];
end
end
A = Anozeros
I'm sure there are other ways too. (Hopefully it's not homework, though it looks like it.)
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!