Filter löschen
Filter löschen

Extract certain rows from matrix

1 Ansicht (letzte 30 Tage)
Nathan Paul
Nathan Paul am 6 Mai 2016
Kommentiert: Guillaume am 6 Mai 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 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 6 Mai 2016
You posted an example of two columns with different sizes.
Guillaume
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.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

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

Guillaume
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, :)

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!

Translated by