removing zeros from matrix
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Mahmoud Zeydabadinezhad
am 17 Mär. 2016
Kommentiert: Image Analyst
am 18 Mär. 2016
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 Kommentare
Akzeptierte Antwort
Roger Stafford
am 17 Mär. 2016
A = A.';
A = reshape(A(A~=0),3,4).';
2 Kommentare
Image Analyst
am 18 Mär. 2016
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
Weitere Antworten (2)
Azzi Abdelmalek
am 17 Mär. 2016
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 Kommentare
Image Analyst
am 17 Mär. 2016
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.)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!