如何在numpy数组中找到最大负数和最小正数?

时间:2019-04-20 01:40:19

标签: python arrays numpy max minimum

我得到了一个既包含正数又包含负数的数组。

import numpy as np
arr = np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])

我想找到对应于最大负数和最小正数的索引。在上面,我的预期结果是24。有没有numpy技巧可以做到这一点?我在此链接中找到了一种解决方案,但我想知道如何通过numpy函数来完成此任务: Finding index of largest negative and smallest positive element in array

3 个答案:

答案 0 :(得分:4)

-inf替换非负值,然后使用argmax查找最大的负值:

np.where(arr < 0, arr, -np.inf).argmax()
# 2

inf替换非正值,然后使用argmin找到最小的正值:

np.where(arr > 0, arr, np.inf).argmin()
# 4

答案 1 :(得分:0)

如果始终对数组进行排序(如提供的示例所示),则:

# 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

答案 2 :(得分:0)

我正面临类似的问题,这是我的方法:

arr=np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])

#Filtering for all the negative values and getting the min of them
print('Threshold for Min val',np.where(arr==[max(arr[arr<0])]))

#Filtering for all the positive values and getting the max of them
print('Threshold for Max val',np.where(val==[min(arr[arr>0])]))