Numpy:如何检查数组是否包含某些数字?

luf*_*ffe 9 python numpy

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

我想知道是否a包含所有元素b.这有简单的操作吗?在这种情况下,这不是真的.

the*_*olf 12

你总是可以使用一套:

>>> a = numpy.array([123, 412, 444])
>>> b = numpy.array([123, 321])
>>> set(b) in set(a)
False
Run Code Online (Sandbox Code Playgroud)

或者使用较新版本的numpy:

>>> numpy.in1d(b,a)
array([ True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

如果你只想要"答案"而不是数组:

>>> numpy.in1d(b,a).all()
False
Run Code Online (Sandbox Code Playgroud)

或者(最不可取):

>>> numpy.array([x in a for x in b]) 
array([ True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

在numpy数组上循环缓慢,应该避免.


pet*_*etr 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"
Run Code Online (Sandbox Code Playgroud)

因此,对于您的情况,您将做一组差异,您将从b中减去a并获得一个数组,其中b中的元素不在a中.然后你可以检查它是否为空.正如您所看到的,输出312是一个条目,a但不在其中b; 它的长度现在大于零,因此有些元素b不存在a.


mat*_*ata 5

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

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

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