检查数组的元素是否存在于python中的另一个数组中

时间:2012-09-27 10:03:49

标签: python arrays numpy

我有两个数组

a = array([1,2,3])    
b = array([2,7])

现在我想检查a的元素是否在b中 返回的答案应该是(False,True,False)。有没有使用函数的一些简单方法呢?

4 个答案:

答案 0 :(得分:2)

使用标准python列表:

>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> tuple(x in b for x in a)
(False, True, False)

假设你的array函数返回一个同时支持迭代的对象和in运算符,它应该是一样的。

答案 1 :(得分:2)

仅使用numpy:

>>> (a[:,None] == b).any(axis=-1)

(因此,我们将a(N,)转换为(N,1)数组,然后使用numpy的广播测试相等性。我们最终得到一个(N, M)数组(假设b的形状为(M,) ...),我们只需检查每行True是否为any(axis=-1)

答案 2 :(得分:1)

这个怎么样:

>>> numpy.setmember1d(a, b)
array([False,  True, False], dtype=bool)

更新,谢谢塞伯格。对于新版本的numpy,这是:

>>> numpy.in1d(a, b)
array([False,  True, False], dtype=bool)

答案 3 :(得分:0)

嗯,这就是我用列表做的方式:

>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> result = []
>>>
>>> for x in a:
...    result.append(x in b)
...
>>> print result
[False, True, False]