0

我有两个数组

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

现在我想检查 a 的元素是否在 b 中,返回的答案应该是 (False, True, False)。有没有一些简单的方法可以在不使用函数的情况下做到这一点?

4

4 回答 4

3

这个怎么样:

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

更新,谢谢seberg。对于较新版本的 numpy,这是:

>>> numpy.in1d(a, b)
array([False,  True, False], dtype=bool)
于 2012-09-27T16:47:46.173 回答
2

使用标准 python 列表:

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

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

于 2012-09-27T10:09:52.247 回答
2

仅使用 numpy:

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

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

于 2012-09-27T10:24:58.413 回答
1

好吧,这就是我对列表的处理方式:

>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> result = []
>>>
>>> for x in a:
...    result.append(x in b)
...
>>> print result
[False, True, False]
于 2012-09-27T10:10:54.363 回答