我有一个如下的数组:
array([[ 10, -1],
[ 3, 1],
[ 5, -1],
[ 7, 1]])
我想要的是获取第一列最小值且第二列为-1(或其他值)时行的索引。
基本上,使用
np.argmin()
并加上第二列等于-1的条件(或其他条件)即可。在我的例子中,我想要获取
[ 5, -1]
的索引2
。我相信有一种简单的方法,但我找不到它。
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
np.argwhere(a[:,1] == -1)[np.argmin(a[a[:, 1] == -1, 0])]
np.argwhere(d[:,1] == 1)[np.argmin(d[d[:, 1] == 1])]
(从-1改为1),我会得到错误的结果。 - cgfnp.argwhere(a[:,1] == -1)[np.argmin(a[a[:, 1] == -1,0])]
这样(未经测试)。 - DSM这并不高效,但如果您有一个相对较小的数组并且想要一行解决方案:
>>> 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]]
上返回一个。 - njzk2