如何在 numpy 数组中找到最大负数和最小正数?
How to find maximum negative and minimum positive number in a numpy array?
我得到一个包含正数和负数的数组。
import numpy as np
arr = np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])
我想找到最大负数和最小正数对应的索引。在上面,我的预期结果是 2
和 4
。是否有任何 numpy
技巧可以实现此目的?我在 link 中找到了解决方案,但我想知道如何通过 numpy
函数来完成此操作:
用-inf
替换非负值,然后用argmax
求出最大的负值:
np.where(arr < 0, arr, -np.inf).argmax()
# 2
类似地用inf
替换非正值然后使用argmin
找到最小的正值:
np.where(arr > 0, arr, np.inf).argmin()
# 4
如果您的数组始终排序(如提供的示例中所示),则:
# 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
我遇到了类似的问题,这是我的方法:
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])]))
我得到一个包含正数和负数的数组。
import numpy as np
arr = np.array([-10.2, -5.3, -2.1, 0, 1.2, 3.4])
我想找到最大负数和最小正数对应的索引。在上面,我的预期结果是 2
和 4
。是否有任何 numpy
技巧可以实现此目的?我在 link 中找到了解决方案,但我想知道如何通过 numpy
函数来完成此操作:
用-inf
替换非负值,然后用argmax
求出最大的负值:
np.where(arr < 0, arr, -np.inf).argmax()
# 2
类似地用inf
替换非正值然后使用argmin
找到最小的正值:
np.where(arr > 0, arr, np.inf).argmin()
# 4
如果您的数组始终排序(如提供的示例中所示),则:
# 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
我遇到了类似的问题,这是我的方法:
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])]))