查找numpy数组中的最小值以及该数组行的其余部分的相应值

Fom*_*ite 9 python numpy

考虑以下NumPy数组:

a = np.array([[1,4], [2,1],(3,10),(4,8)])
Run Code Online (Sandbox Code Playgroud)

这给出了一个如下所示的数组:

array([[ 1,  4],
       [ 2,  1],
       [ 3, 10],
       [ 4,  8]])
Run Code Online (Sandbox Code Playgroud)

我要做的是找到第二列的最小值(在这种情况下为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)
Run Code Online (Sandbox Code Playgroud)

YXD*_*YXD 20

怎么样

a[np.argmin(a[:, 1]), 0]
Run Code Online (Sandbox Code Playgroud)

分解

一个.抓住第二列

>>> a[:, 1]
array([ 4,  1, 10,  8])
Run Code Online (Sandbox Code Playgroud)

湾 获取第二列中最小元素的索引

>>> np.argmin(a[:, 1])
1
Run Code Online (Sandbox Code Playgroud)

C.a用它来索引以获得相应的行

>>> a[np.argmin(a[:, 1])]
array([2, 1])
Run Code Online (Sandbox Code Playgroud)

d.并采取第一个元素

>>> a[np.argmin(a[:, 1]), 0]
2
Run Code Online (Sandbox Code Playgroud)

  • 虽然为了我自己的理智,你能否解释一下这对我有什么用呢?试图避免货物编码. (3认同)

wim*_*wim 5

使用np.argmin可能是解决这个问题的最佳方法.要在纯python中执行此操作,您可以使用:

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