根据行的第二个值查找二维 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])
我有一个类似于下图所示的 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])