Python Numpy:根据条件获取最小值的索引

Python Numpy:根据条件获取最小值的索引,python,numpy,Python,Numpy,我有这样一个数组: array([[ 10, -1], [ 3, 1], [ 5, -1], [ 7, 1]]) 我想得到的是第一列中值最小,第二列中值为-1的行的索引 因此基本上,np.argmin(),条件是第二列等于-1(或任何其他值) 在我的示例中,我想得到2,它是[5,-1]的索引 我很确定有一种简单的方法,但我找不到。这不是很有效,但如果您的阵列相对较小,并且需要单线解决方案: import numpy as np a = np.ar

我有这样一个数组:

array([[ 10, -1],
       [ 3,  1],
       [ 5, -1],
       [ 7,  1]])
我想得到的是第一列中值最小,第二列中值为-1的行的索引

因此基本上,
np.argmin()
,条件是第二列等于-1(或任何其他值)

在我的示例中,我想得到
2
,它是
[5,-1]
的索引


我很确定有一种简单的方法,但我找不到。

这不是很有效,但如果您的阵列相对较小,并且需要单线解决方案:

import numpy as np

a = np.array([
    [10, -1],
    [ 3,  1],
    [ 5, -1],
    [ 7,  1]])

mask = (a[:, 1] == -1)

arg = np.argmin(a[mask][:, 0])
result = np.arange(a.shape[0])[mask][arg]
print result
>>> a = np.array([[ 10, -1],
...               [ 3,  1],
...               [ 5, -1],
...               [ 7,  1]])
>>> [i for i in np.argsort(a[:, 0]) if a[i, 1] == -1][0]
2

您可以像
np.argmin([i for i in a if i[1]=-1])
一样对数组进行预过滤,但它在数组上运行时仍然返回一个
[[10,-1],[5,-1]]
是的,我尝试过这些方法。不幸的是,我需要的是初始数组的索引。我不确定问题出在哪里,但如果我尝试
np.argwhere(d[:,1]==1)[np.argmin(d[d[:,1]==1])]
相反(从-1改为1),我会得到一个错误的结果。我认为您需要选择适当的列,例如
np.argwhere(a[:,1]=-1)[np argmin(a[:,1]==-1,0])]
(未测试)。是的,我错过了argmin中的列选择。谢谢
>>> a = np.array([[ 10, -1],
...               [ 3,  1],
...               [ 5, -1],
...               [ 7,  1]])
>>> [i for i in np.argsort(a[:, 0]) if a[i, 1] == -1][0]
2