在numpy数组中找到最小值及其对应行的其他值

9 投票
2 回答
10353 浏览
提问于 2025-04-17 16:21

考虑以下这个NumPy数组:

a = np.array([[1,4], [2,1],(3,10),(4,8)])

这个数组看起来像这样:

array([[ 1,  4],
       [ 2,  1],
       [ 3, 10],
       [ 4,  8]])

我想做的是找到第二列的最小值(在这个例子中是1),然后报告这个最小值对应的另一列的值(在这个例子中是2)。我试过用类似argmin的东西,但它被第一列的1搞混了。

有没有简单的方法可以做到这一点?我也考虑过对数组进行排序,但我似乎无法做到让成对的数据保持在一起。数据是通过像下面这样的循环生成的,所以如果有更简单的方法可以做到,而不是使用numpy数组,我也很乐意接受:

results = np.zeros((100,2))

# Loop over search range, change kappa each time
for i in range(100):
    results[i,0] = function1(x)
    results[i,1] = function2(y)

2 个回答

5

使用 np.argmin 可能是解决这个问题的最佳方法。如果你想用纯 Python 来实现,可以这样写:

min(tuple(r[::-1]) for r in a)[::-1]

21

怎么样呢

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

步骤解析

a. 先拿到第二列的数据

>>> a[:, 1]
array([ 4,  1, 10,  8])

b. 找出第二列中最小值的索引

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

c. 用这个索引去查找对应的行

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

d. 然后取出这一行的第一个元素

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

撰写回答