10

例如:我有a = np.array([123, 412, 444]) 并且b = np.array([123, 321])

想知道是否a包含. 有这个简单的操作吗?在这种情况下,这是不正确的。b

4

4 回答 4

14

你总是可以使用一组:

>>> 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 数组上很慢,应该避免。

于 2012-05-12T16:56:13.887 回答
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存在于的条目;它的长度现在大于零,因此存在其中不存在的元素。abba

于 2012-05-12T16:50:03.493 回答
4

这意味着您要检查 b 的每个元素是否包含在 a 中。 in1d这样做:

from numpy import array, in1d
a = array([123, 412, 444])
b = array([123, 321])
print in1d(b, a).all()

2021 年更新:现在np.isin推荐

于 2012-05-12T16:54:43.443 回答
-1

你可以这样做:

 a = an_array
 b = another_array
 for i in b:
    if i not in a:
        return False
return True
于 2012-05-12T16:50:52.713 回答