Numpy:搜索第一个匹配的行

时间:2015-10-26 16:46:59

标签: python arrays numpy

如果我有这样的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

我知道numpynumpy.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)

1 个答案:

答案 0 :(得分:4)

如果搜索列表为[0,2],则在与x进行比较时会引入broadcasting,为我们提供与x形状相同的模板。由于您要查找完全匹配,因此您会查找包含.all(1)所有TRUE值的行。最后,您需要第一个索引,因此请使用np.wherenp.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