首页 > 解决方案 > 如何仅删除一次在数组中重复的最小元素

问题描述

假设我们有 x = np.array([[1,2,3,4],[5,6,5,5]])。我想删除每个数组中的 min 元素,即使重复只删除一次,这样我就可以获得 x = np.array([[2,3,4],[6,5,5]])。我该怎么做?

我可以成功删除 min,但它会删除所有 min 元素并给我 np.array([2,3,4,6]) 并且可能需要在此之后执行 np.reshape ,但这是一个细节。我使用了类似的东西:

x[np.where(x != np.min(x,axis=1,keepdims=True))]

标签: pythonarrayspython-3.xmatrixnumpy-ndarray

解决方案


尝试这个:

x = np.array([[1, 2, 3, 4], [5, 6, 5, 5]])

def delete_first_min(arr: np.array):
    min_indexes = np.where(arr == np.min(arr))[0]
    first_min_index = min_indexes[0]
    return np.delete(arr, first_min_index) 
    # short: return np.delete(arr, np.where(arr == np.min(arr))[0][0]) 
    

x = np.apply_along_axis(delete_first_min, 1, x)

print(x)

>> [[2 3 4]
>>  [6 5 5]]

np.where(arr == np.min(arr))[0]返回具有最小值的元素的索引数组,因此[0]再次对其下标会返回第一个 min 元素。


推荐阅读