Extract certain rows from matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Guillaume
am 6 Mai 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.
Antworten (2)
KSSV
am 6 Mai 2016
You can subtract the second column with first column. Where ever zero is there, extract that row.
0 Kommentare
Guillaume
am 6 Mai 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 Kommentare
Siehe auch
Kategorien
Mehr zu Numeric Types finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!