Use np.in1d
that gives us a flattened mask of such matching occurrences and then reshape back to input array shape for the desired output, like so -
np.in1d(a,[2,3]).reshape(a.shape)
Note that we need to feed in the numbers to be searched as a list or an array.
Sample run -
In [5]: a
Out[5]:
array([[1, 2, 0, 3, 4],
[0, 4, 2, 1, 3],
[4, 3, 2, 0, 1],
[4, 2, 3, 0, 1],
[1, 0, 2, 3, 4],
[4, 3, 2, 0, 1]])
In [6]: np.in1d(a,[2,3]).reshape(a.shape)
Out[6]:
array([[False, True, False, True, False],
[False, False, True, False, True],
[False, True, True, False, False],
[False, True, True, False, False],
[False, False, True, True, False],
[False, True, True, False, False]], dtype=bool)
2018 Edition : numpy.isin
Use NumPy built-in np.isin
(introduced in 1.13.0
) that keeps the shape and hence doesn't require us to reshape afterwards -
In [153]: np.isin(a,[2,3])
Out[153]:
array([[False, True, False, True, False],
[False, False, True, False, True],
[False, True, True, False, False],
[False, True, True, False, False],
[False, False, True, True, False],
[False, True, True, False, False]])