查找x落入numpy数组的行的索引

时间:2017-01-17 16:16:25

标签: python numpy search

我有一个numpy数组:

import numpy as np
stm = np.array([[0,1],[1,5],[4,5],[3,6],[7,9]]) 
x = 3.5

我想查找索引列表,其中:stm[i][0]<= x <=stm[i][1] 结果应为[1,3]

有没有办法在numpy中执行此操作而无需遍历stm

3 个答案:

答案 0 :(得分:4)

您可以使用布尔屏蔽和np.where()

>>> np.where((stm[:,0] <= x) & (stm[:,1] >= x))
(array([1, 3]),)

作为替代方案,您也可以使用np.argwhere(由@MSeifert建议),np.nonzeronp.flatnonzero。 它们的行为略有不同,所以了解所有这些都是个好主意。

答案 1 :(得分:1)

使用布尔掩码和np.argwhere

可以轻松实现
>>> np.argwhere((stm[:,0] <= x) & (stm[:,1] >= x))
array([[1],
       [3]], dtype=int64)

或者如果您只想要第一个索引:

>>> np.argwhere((stm[:,0] <= x) & (stm[:,1] >= x))[:,0]
array([1, 3], dtype=int64)

答案 2 :(得分:0)

有点短:

((stm-x).prod(1)<=0).nonzero()