removing zeros from matrix
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Mahmoud Zeydabadinezhad
il 17 Mar 2016
Commentato: Image Analyst
il 18 Mar 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 Commenti
Risposta accettata
Roger Stafford
il 17 Mar 2016
A = A.';
A = reshape(A(A~=0),3,4).';
2 Commenti
Image Analyst
il 18 Mar 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
Più risposte (2)
Azzi Abdelmalek
il 17 Mar 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 Commenti
Image Analyst
il 17 Mar 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.)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!