根据行的第二个值查找二维 numpy 数组的最小值

Finding minimum value of 2d numpy array based on second value of row

我有一个类似于下图所示的 NumPy 数组,我想根据行的第二项找到最小元素。我可以使用 sorted 函数实现此目的,是否有内置的 NumPy 函数可以实现相同的目的(可能是单行函数)?

import numpy as np
a = np.array([[1,20], [2,3], [3,3], [4,3], [5,4],[1,2], [2,3], [3,3], [4,3], [5,4],[1,2], [2,3], [3,3], [4,3], [5,4], [1,2], [2,3], [3,3], [4,3], [5,4], [1,2], [2,3]])

min_ = sorted(a, key=lambda row: row[1])[0]

非常感谢。

试试 argsort:

>>> a[a[:, 1].argsort()][0]
array([1, 2])

你也可以点赞

a[np.argmin(a[:, 1])]

您可以使用 numpy.lexsort 对多个轴进行排序,如下所示:

>>> a[np.lexsort((a[:,1], a[:,0]))][0]
array([ 1,  2])

在python中,保证排序稳定。如果您的值与第二列中的其他值相似,则可能您得到了错误的答案。

Ref:

Sort Stability and Complex Sorts

Sorts are guaranteed to be stable. That means that when multiple records have the same key, their original order is preserved.

>>> a = np.array([[2,1], [1,1]])
>>> a[np.argmin(a[:, 1])]
array([ 2,  1])

>>> a[a[:, 1].argsort()][0]
array([ 2,  1])

>>> a[np.lexsort((a[:,1], a[:,0]))][0]
array([ 1,  1])