How can I delete specific columns from a matrix?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Josh Halff
le 3 Juil 2017
Réponse apportée : Arezoo Samiei
le 2 Avr 2019
I have a 3xn matrix of data, and anywhere that data is repeated I've converted it to a column of zeros. Now, I want to clear the zero columns and leave only the relevant data. How can I do this? I've tried:
for i = length(matrix):1
if matrix(1,i) == 0
matrix(:,i) = [];
end
end
and it doesn't work. Please help. Here is the matrix I'm currently working with:
Columns 1 through 15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Columns 16 through 30
0 0 0 0 0 0 0 9 0 0 0 10 0 11 11
0 0 0 0 0 0 0 2 0 0 0 6 0 1 6
0 0 0 0 0 0 0 3 0 0 0 8 0 7 9
Columns 31 through 36
0 0 12 12 0 0
0 0 1 2 0 0
0 0 4 8 0 0
0 commentaires
Réponse acceptée
Guillaume
le 3 Juil 2017
Modifié(e) : Guillaume
le 3 Juil 2017
Of course, it does not work:
for i = length(matrix):1
I assume you're trying to run the loop in reverse so that you don't shift rows yet to process as you delete rows. That's not how you tell matlab to run a loop in reverse. You have to specify the increment/decrement. Also, never use length on a matrix. If your n is less than 3, it'll return the number of columns instead and leads to interesting bugs. Always use size with an explicit dimension. So:
for i = size(matrix, 2):-1:1
would work. However, a loop is just a waste of time when it can all be accomplished in just one line with:
matrix(:, matrix(1, :) == 0) = [];
3 commentaires
Guillaume
le 3 Juil 2017
Sorry, an extra closing bracket got in there by mistake. Fixed now (and also edited to delete columns instead of rows as I misread your post.
Plus de réponses (2)
Andrei Bobrov
le 3 Juil 2017
your_mtx = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 10 0 11 11 0 0 12 12 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 6 0 1 6 0 0 1 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 8 0 7 9 0 0 4 8 0 0];
out = your_mtx(:,any(your_mtx));
0 commentaires
Arezoo Samiei
le 2 Avr 2019
Use the following command is the other way
C = setdiff(A,B)
0 commentaires
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!