如何检查对象是否在numpy数组的元素列表中?

时间:2017-06-23 07:37:23

标签: python numpy

例如,我有一个列表l

l = np.array([[1,2], [3], [2,4]])

我希望检查数组中哪些元素包含2。

通过使用列表理解,我可以轻松实现它,但效率不高。

result = [2 in element for element in l]

我可以使用numpy更有效地获得结果。

感谢。

1 个答案:

答案 0 :(得分:1)

这是一种方法 -

def in_eachlist(l, search_num):
    mask = np.concatenate(l) == search_num
    lens = [len(i) for i in l]
    return np.logical_or.reduceat(mask,np.concatenate(([0], np.cumsum(lens[:-1]))) )

基本上,我们从列表的输入数组中获取1D数组,并与搜索号进行比较,为我们提供一个掩码。然后,我们检查每个时间间隔内是否有Truenp.logical_or.reduceat(感谢@Daniel F改进,因为我之前使用过np.add.reduceat然后查找了任何sum > 1 1}}),给我们所需的输出。

示例运行 -

In [41]: l
Out[41]: array([[1, 2], [3], [2, 4]], dtype=object)

In [42]: in_eachlist(l,2)
Out[42]: array([ True, False,  True], dtype=bool)

In [43]: in_eachlist(l,3)
Out[43]: array([False,  True, False], dtype=bool)

In [44]: in_eachlist(l,4)
Out[44]: array([False, False,  True], dtype=bool)