如果我有这样的numpy数组:
import numpy as np
x = np.array([[0,1],[0,2],[1,1],[0,2]])
如何返回与[0,2]
匹配的第一行的索引?
对于列表,使用index
:
[[0,1],[0,2],[1,1],[0,2]]
l.index([0,2])
> 1
我知道numpy
有numpy.where
函数,但我不确定如何对numpy.where
的输出做出:
np.where(x==[0,2])
> (array([0, 1, 1, 3, 3]), array([0, 0, 1, 0, 1]))
还有numpy.argmax
,但这也没有返回我正在寻找的东西,这只是索引1
np.argmax(x == [0,2], axis = 1)
答案 0 :(得分:4)
如果搜索列表为[0,2]
,则在与x
进行比较时会引入broadcasting
,为我们提供与x
形状相同的模板。由于您要查找完全匹配,因此您会查找包含.all(1)
所有TRUE
值的行。最后,您需要第一个索引,因此请使用np.where
或np.nonzero
并选择第一个元素。作为样本运行的实现将是 -
In [132]: x
Out[132]:
array([[0, 1],
[0, 2],
[1, 1],
[0, 2]])
In [133]: search_list = [0,2]
In [134]: np.where((x == search_list).all(1))[0][0]
Out[134]: 1
In [135]: np.nonzero((x == search_list).all(1))[0][0]
Out[135]: 1