简体   繁体   中英

Numpy: How to check if array contains certain numbers?

For example: I have a = np.array([123, 412, 444]) and b = np.array([123, 321])

I want to know if a contains all the elements in b . Is there a simple operation for this? In this case that would not be true.

You could alway use a set:

>>> a = numpy.array([123, 412, 444])
>>> b = numpy.array([123, 321])
>>> set(b) in set(a)
False

Or with newer versions of numpy:

>>> numpy.in1d(b,a)
array([ True, False], dtype=bool)

If you want just 'the answer' rather than an array:

>>> numpy.in1d(b,a).all()
False

Or (least desirable):

>>> numpy.array([x in a for x in b]) 
array([ True, False], dtype=bool)

Looping is slowish on numpy arrays and should be avoided.

You can use set difference to determine what you are looking for. Numpy has a built-in function called numpy.setdiff1d(ar1, ar2) :

Return the sorted, unique values in ar1 that are not in ar2.

Example for your case:

>>> 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"

So for your case, you would do a set difference you would subtract a from b and obtain an array with elements in b which are not in a. Then you can check if that was empty or not. As you can see, the output is 312 , which is an entry present in a but not in b ; the length of it is now larger then zero, therefore there were elements in b which were not present in a .

that means you want to check if each element of b is contained in a. in1d does that:

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

Update from 2021: nowadays np.isin is recommended

you could do:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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