How do I delete an entire row if a specific column contains a zero?
Show older comments
Right, so I'm new to MATLAB, but what I have is a large data set (10074x4), the second column of which is a binary code, so whenever theres a zero in that column I want to delete the entire row. Any tips on how to go about doing this? Thanks
Accepted Answer
More Answers (1)
Sean de Wolski
on 20 Sep 2011
X = X(logical(X(:,2)),:);
straight conversion to logical will be faster. It is advised to avoid using find and to use logical indexing whenever possible.
Breaking the above into steps, I keep all of rows in which X(:,2) converted to logical (0 = 0,everything else = 1).
10 Comments
Croy Carlin
on 20 Sep 2011
Sean de Wolski
on 20 Sep 2011
-taking Wayne's X matrix.
-we convert the second column to a logical vector, i.e. if it's _exactly_ 0 it stays logical (binary) zero (aka false), if it's anything else, it becomes logical one (binary true).
logical(X(:,2))
-Then we extract the rows with a logical one and their corresponding columns in the reassignment to X, the rows with a logical false are tossed.
Sean de Wolski
on 20 Sep 2011
Welcome to MATLAB and Answers!
Croy Carlin
on 20 Sep 2011
Sean de Wolski
on 20 Sep 2011
X = Waynes_matrix;
index2keep = logical(X(:,2)); %logical second column
X = X(index2keep,:);
Let's say it was something more difficult, e.g. the first column has to equal three and the second column has to be less than pi:
index2keep = X(:,1)==3 & X(:,2) < pi; %first column equal to three and second column less than pi.
X = X(index2keep,:);
Sean de Wolski
on 20 Sep 2011
The best way is just to keep programming. Get a working solution and then ask us/the documentation how to make it better. And of course ask us when you have a specific operation like this, that appears it could be optimized.
Croy Carlin
on 20 Sep 2011
Joshua Goldman
on 30 Dec 2015
This worked perfectly for me, too. Thanks very much.
Aaron Smith
on 26 Aug 2016
Edited: Aaron Smith
on 26 Aug 2016
I know this is a dead thread, but this worked great for me too. It made it so easy to delete any rows in which my first column had a 0. But, how could I do this for a multidimensional matrix? For example, as a single matrix my working code is:
Data = Data(logical(Data(:,1)),:);
but now I need it to do this for 12 other matrices within a for loop. The code I currently have is:
subjects = 12; for sub = 1:subjects
sheet = ['Sheet' num2str(sub)];
Data(:,:,sub) = xlsread('801 Matlab Test.xlsx',sheet);
Data(:,:,sub) = Data(logical(Data(:,1,sub)),:,sub);
end
and I get an error of dimension mismatch. Any ideas?
Rubina Easmin
on 10 Feb 2020
Edited: Rubina Easmin
on 10 Feb 2020
I'm new to MATLAB, I want to delete the entire rows and columns which contain all of ones in a binary image.I want to keep rows and columns if that contain only single zero. Any tips on how to go about doing this? Thanks
>> binaryimage
binaryimage =
33×35 logical array
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 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
1 1 1 1 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
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1
1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1
1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 1
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 1
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1
1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1
1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1
1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1
1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
I want to remove rows and columns that contains all of ones
Categories
Find more on Matrix Indexing 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!