Nycolas Mancini
Nycolas Mancini

Reputation: 153

Find the first value that meets criteria, not its index

I have a array with these elements:

array= [21558  43101  64638  86173 107701 129232 150775 172355 193864 215457
237071 258586 280130 301687 23255 344790 366285 387838 409365 430856
452367 473893 495456 516955 538543 560110 581641 603188]

In my program, there is a variable n that is randomly sorted. What I'm trying to achieve is very simple, but I just can't get anything to work.

With the line below, I'll find the index of the first value that is greater than n

value_index=np.where(array > n)[0][0]

What I need is to find the value that it represents, not the index.

Of course, I can simply just insert the value_index variable and call the value in a list, but I'm tryign to be as efficient as possible.

Can anyone help me find the fastest way possible to find this value?

Upvotes: 1

Views: 36

Answers (1)

Mad Physicist
Mad Physicist

Reputation: 114230

Numpy generally isn't very good at getting the first of something without first computing the rest of the values. There is no equivalent to Pythons's

next(x  for x in array if x > n)

Instead, you have to compute the mask of x > n, and get the first index of that. There are better ways to do this than np.where:

ind = np.flatnonzero(array > n)[0]

OR

ind = np.argmax(array > n)[0]

In either case, your best bet to get the value is

array[ind]

Upvotes: 1

Related Questions