繁体   English   中英

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

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

我有一个 NumPy 数组,如下所示,我想根据行的第二项找到最小元素。 我可以使用排序的 function 来实现这一点,是否有内置的 NumPy function 来实现相同的(可能是单行函数)?

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 中,保证排序是稳定的。 如果您的值与第二列中的其他值相似,则您可能得到了错误的答案。

参考

排序稳定性和复杂排序

保证排序是稳定的。 这意味着当多个记录具有相同的键时,它们的原始顺序将被保留。

>>> 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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM