Extract certain rows from matrix
4 views (last 30 days)
Show older comments
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
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.
Answers (2)
KSSV
on 6 May 2016
You can subtract the second column with first column. Where ever zero is there, extract that row.
0 Comments
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, :)
0 Comments
See Also
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!