How to find maximum negative and minimum positive number in a numpy array?
13,062
Solution 1
Replace non negative values with -inf
, then use argmax
to find the largest negative:
np.where(arr < 0, arr, -np.inf).argmax()
# 2
Similarly replace non positive values with inf
then use argmin
to find the smallest positive:
np.where(arr > 0, arr, np.inf).argmin()
# 4
Solution 2
If your array is always sorted (as in the provided example), then:
# input
Out[66]: array([-10.2, -5.3, -2.1, 0. , 1.2, 3.4])
# obtain a `signed` boolean mask
In [75]: sign_mask = np.sign(arr)
# compute derivative and obtain index for max_negative element
In [76]: max_neg_idx = np.where(np.diff(sign_mask, append=1) == 1)[0][0]
# add +2 to that to get index for min_positive element
In [77]: min_pos_idx = max_neg_idx + 2
Related videos on Youtube
Author by
matttree
Updated on June 04, 2022Comments
-
matttree almost 2 years
I am given an array containing both positive and negative numbers.
import numpy as np arr = np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])
I would like to find the index corresponding to the maximum negative number and to a minimum positive number. In the above, my expected outcome is
2
and4
. Is there anynumpy
trick to achieve this? I have found a solution in this link, but I would like to know how this could be done throughnumpy
functions: Finding index of largest negative and smallest positive element in array-
John Zwinck about 5 yearsIs it guaranteed that the input is sorted?
-
matttree about 5 yearsNo, it is not guaranteed.
-
-
Warren Weckesser about 5 yearsOr replace with
nan
and usenanargmax
andnanargmin
. But that's not much different than usinginf
. -
Lost almost 2 years@Psidom Is using Numpy functions as in your answer faster or doing it with lists as mentioned in the answer tagged in the question faster?