我有两个数组
a = array([1,2,3])
b = array([2,7])
现在我想检查 a 的元素是否在 b 中,返回的答案应该是 (False, True, False)。有没有一些简单的方法可以在不使用函数的情况下做到这一点?
这个怎么样:
>>> numpy.setmember1d(a, b)
array([False, True, False], dtype=bool)
更新,谢谢seberg。对于较新版本的 numpy,这是:
>>> numpy.in1d(a, b)
array([False, True, False], dtype=bool)
使用标准 python 列表:
>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> tuple(x in b for x in a)
(False, True, False)
假设您的array
函数返回一个同时支持迭代和in
运算符的对象,它应该工作相同。
仅使用 numpy:
>>> (a[:,None] == b).any(axis=-1)
(所以,我们a
从 a转换(N,)
为一个(N,1)
数组,然后使用 numpy 的广播测试是否相等。我们最终得到一个(N, M)
数组(假设它b
有一个形状(M,)
......),我们只需检查True
每一行是否有any(axis=-1)
.
好吧,这就是我对列表的处理方式:
>>> a = [1, 2, 3]
>>> b = [2, 7]
>>> result = []
>>>
>>> for x in a:
... result.append(x in b)
...
>>> print result
[False, True, False]