![](/img/trans.png)
[英]Finding the 1D numpy array based on the max value in the second column of a 2D numpy array
[英]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.