# Find the First element that satisfies a condition

170 views (last 30 days)

Show older comments

I have an nxn matrix and would like to find the first element in each row that satisfies a given condition, and gives me NaN if there are none that meet the condition. The find command will give me all elements that satisfy it, but I only care about the first one in each row.

For instance, if my matrix is A = [7 3 9;5 8 8;0,2,6] and my condition is A<5, I would like to use a function that gives me [3 NaN 0] or at least tells me where in the matrix I can find those values and use it to index A.

Thanks!

##### 0 Comments

### Accepted Answer

Stephen
on 12 Mar 2016

Edited: Stephen
on 12 Mar 2016

No loops or find is required, just some logical indexing does the trick:

>> A = [7 3 9;5 8 8;0,2,6];

>> B = A.'; % important: arrange the data columnwise

>> X = B<5;

>> Y = cumsum(X,1)==1 & X;

>> Z = any(Y,1);

>> out(Z) = B(Y);

>> out(~Z) = NaN

out =

3 NaN 0

### More Answers (3)

Andrei Bobrov
on 12 Mar 2016

Edited: Andrei Bobrov
on 14 Mar 2016

t = A < 5;

x = cumsum(t,2) == 1 & t;

out = sum(x.*A,2);

out(~any(t,2)) = nan

idx = x*(1:size(A,2))'

##### 4 Comments

Olubunmi Anthony Jeyifous
on 11 Nov 2018

MHN
on 12 Mar 2016

Edited: MHN
on 12 Mar 2016

If you dont mind a little coding:

A = [7 3 9;5 8 8;0,2,6];

FirstCon = zeros(size(A,1),1);

i=1;

B = A'; % I am going to use the power of Matlab for processing a whole column, so I have to reverse the original matrix, so the rows become columns.

for I = B

temp = I(I<5);

if isempty(temp)

FirstCon(i,1) = NaN;

else

FirstCon(i,1) = temp(1);

end

i=i+1;

end

##### 0 Comments

Bill Tubbs
on 12 Apr 2021

If you only want to find the locations in A where the condition is true and then index those values you can use find:

>> elements_idx = find(A<5)

elements_idx =

3

4

6

>> A(elements_idx)

ans =

0

3

2

Note: the indices in elements_idx are not (row, col) indices as you might expect for a matrix but linear indices starting in the top-left element and incrementing down through each column from left to right.

##### 0 Comments

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!