2010-11-30 92 views
3

在纯,unvectorised,Python中我可以使用,相当于 '在' 比较两个numpy的阵列

>>> a = 9 
>>> b = [5, 7, 12] 
>>> a in b 
False 

我愿做阵列类似的东西在与NumPy即

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
np.array([False, False, False, False, True, False, True, False, False, False])

。 ..虽然这不起作用。

是否有实现此功能或方法?如果不是最简单的方法是什么?

回答

8

您正在寻找in1d

>>> import numpy as np 
>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> np.in1d(a, b) 
array([False, False, False, False, True, False, True, False, False, False], dtype=bool) 
1

你正在比较两个截然不同的东西。用纯Python列表,你有一个int和一个列表。随着numpy,你有两个numpy数组。如果你改变一个int,那么它在numpy中按预期工作。

>>> a = 9 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
False 

另外请注意,你显示两个列表是一个非常直观的结果。返回的数组向您显示数组a中的每个值是否在b? 5和7是,其他则不是。因此给出的结果。

+0

是,这两个名单的情况是直观的,然而,这是_not_ numpy的行为方式(虽然我也喜欢!) - 我已经编辑质疑到使这个更清楚... – Brendan 2010-11-30 14:25:36

0

如果要测试一个序列是否包含另一个序列,则可能需要实施某种字符串搜索算法。 Reference from Wikipedia