例如:我有a = np.array([123, 412, 444])
和b = np.array([123, 321])
我想知道a
是否包含b
中所有元素。这有简单的操作吗?在这种情况下,这不是真的。
答案 0 :(得分:12)
你总是可以使用一套:
>>> a = numpy.array([123, 412, 444])
>>> b = numpy.array([123, 321])
>>> set(b) in set(a)
False
或者使用较新版本的numpy:
>>> numpy.in1d(b,a)
array([ True, False], dtype=bool)
如果你只想要“答案”而不是数组:
>>> numpy.in1d(b,a).all()
False
或(最不可取):
>>> numpy.array([x in a for x in b])
array([ True, False], dtype=bool)
在numpy数组上循环缓慢,应该避免。
答案 1 :(得分:10)
您可以使用设定差异来确定您要查找的内容。 Numpy有一个名为numpy.setdiff1d(ar1, ar2)的内置函数:
返回ar1中不在ar2中的已排序唯一值。
您的案例示例:
>>> a = np.array([123, 412, 444])
>>> b = np.array([123, 321])
>>> diff = np.setdiff1d(b, a)
>>> print diff
array([321])
>>> if diff.size:
>>> print "Not passed"
所以对于你的情况,你会做一个集合差异,你将从b中减去a并获得一个数组,其中b中的元素不在a中。然后你可以检查它是否为空。如您所见,输出为312
,这是a
中的条目,但b
中没有;它的长度现在大于零,因此b
中有a
中没有的元素。
答案 2 :(得分:2)
这意味着您要检查b中的每个元素是否包含在a中。
in1d
这样做:
from numpy import array, in1d
a = array([123, 412, 444])
b = array([123, 321])
print in1d(b, a).all()
答案 3 :(得分:-1)
a = an_array
b = another_array
for i in b:
if i not in a:
return False
return True