繁体   English   中英

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

[英]Numpy: How to check if array contains certain numbers?

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

我想知道a包含b中的所有元素。 有没有简单的操作呢? 在这种情况下,情况并非如此。

你总是可以使用一个集合:

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

您可以使用集差来确定您要查找的内容。 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

这意味着您要检查 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

你可以这样做:

 a = an_array
 b = another_array
 for i in b:
    if i not in a:
        return False
return True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM