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