How can I delete specific columns from a matrix?

1 view (last 30 days)
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

Accepted Answer

Guillaume
Guillaume on 3 Jul 2017
Edited: Guillaume on 3 Jul 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 Comments
Guillaume
Guillaume on 3 Jul 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.

Sign in to comment.

More Answers (2)

Andrei Bobrov
Andrei Bobrov on 3 Jul 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));

Arezoo Samiei
Arezoo Samiei on 2 Apr 2019
Use the following command is the other way
C = setdiff(A,B)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!