Extract certain rows from matrix

4 views (last 30 days)
Nathan Paul
Nathan Paul on 6 May 2016
Commented: Guillaume on 6 May 2016
I have a data matrix with 4 columns and 'n' number of rows, I want to extract the rows where the first two columns match certain values from the first two columns.
E.g where they match every possible combination of column 1 = 0.05, 0.1, 0.2, 0.5 and column 2 = 0.05, 0.1, 0.25, 0.5, 1.0, 2.0, 3.0
I am extremely stuck I've managed to find what every possible combination would be for column 1 and 2 but dont know how to apply that to the data matrix
  2 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 6 May 2016
You posted an example of two columns with different sizes.
Guillaume
Guillaume on 6 May 2016
The set of valid values for column 1 does not have to be the same size as the set of valid values for column 2. I don't see any issue with that.

Sign in to comment.

Answers (2)

KSSV
KSSV on 6 May 2016
You can subtract the second column with first column. Where ever zero is there, extract that row.

Guillaume
Guillaume on 6 May 2016
To test if members of a set belong to another set you use ismember, with the 'rows' option in your case:
%given:
col1set = [0.05, 0.1, 0.2, 0.5];
col2set = [0.05, 0.1, 0.25, 0.5, 1.0, 2.0, 3.0];
%demo data
data = [0.05, 0.5, 1, 1;
0.3, 0.05, 2, 2;
0.2, 0.4, 3, 3;
0.1, 0.1, 4, 4;
0.5, 0.05, 5, 5;
0.05, 0.5, 6, 6]; %demo data
%build every combinations of col1set with col2set
%I'm using ndgrid for this. There are other ways
[c1, c2] = ndgrid(col1set, col2set);
validrows = [c1(:), c2(:)];
%find which rows of data match validrows, only for column 1 and 2:
tokeep = ismember(data(:, [1 2]), validrows, 'rows');
%and use that to filter the original array
filtereddata = data(tokeep, :)

Categories

Find more on Numeric Types 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!