Georgy90
Georgy90

Reputation: 155

Find rows of a matrix whose certain columns all match a condition

Suppose I have a matrix with many rows and columns, for example a small subset would be:

1     2     3     4     5     6
1     1     5     6     0     0
1     2     2     3     2     1
1     2     0     3     4     5
1     9     5     7     3     0

I want to find the rows whose columns #4, #5 and #6 contain elements greater than zero, so I in this case would get a vector like this:

 1
 3
 4

I have tried using the find() function this way:

idx = find(y(:, 4:6) > 0)

but I get this:

 1
 2
 3
 4
 5
 6
 8
 9
10
11
13
14

Upvotes: 0

Views: 64

Answers (1)

pallgeuer
pallgeuer

Reputation: 1376

You can use a combination of find and all like this:

idx = find(all(y(:,4:6) > 0, 2))

This gives:

>> y = [1 2 3 4 5 6; 1 1 5 6 0 0; 1 2 2 3 2 1; 1 2 0 3 4 5; 1 9 5 7 3 0]
y =

   1   2   3   4   5   6
   1   1   5   6   0   0
   1   2   2   3   2   1
   1   2   0   3   4   5
   1   9   5   7   3   0

>> idx = find(all(y(:,4:6) > 0, 2))
idx =

   1
   3
   4

The idea is that we extract columns 4 to 6, check which values are greater than 0, operate along the 2nd dimension with an AND condition (all), and then extract which indices (rows) are 1/true in the resulting column vector.

Upvotes: 3

Related Questions