例如,我有一个列表l
。
l = np.array([[1,2], [3], [2,4]])
我希望检查数组中哪些元素包含2。
通过使用列表理解,我可以轻松实现它,但效率不高。
result = [2 in element for element in l]
我可以使用numpy
更有效地获得结果。
感谢。
答案 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
数组,并与搜索号进行比较,为我们提供一个掩码。然后,我们检查每个时间间隔内是否有True
值np.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)