How to perform element-wise Boolean operations on NumPy arrays [duplicate]
Try this:
mask = (foo < 40) | (foo > 60)
Note: the __or__
method in an object overloads the bitwise or operator (|
), not the Boolean or
operator.
If you have comparisons within only Booleans, as in your example, you can use the bitwise OR operator |
as suggested by Jcollado. But beware, this can give you strange results if you ever use non-Booleans, such as mask = (foo < 40) | override
. Only as long as override
guaranteed to be either False, True, 1, or 0, are you fine.
More general is the use of NumPy's comparison set operators, np.any
and np.all
. This snippet returns all values between 35 and 45 which are less than 40 or not a multiple of 3:
import numpy as np
foo = np.arange(35, 46)
mask = np.any([(foo < 40), (foo % 3)], axis=0)
print foo[mask]
OUTPUT: array([35, 36, 37, 38, 39, 40, 41, 43, 44])
It is not as nice as with |
, but nicer than the code in your question.
You can use the NumPy logical operations. In your example:
np.logical_or(foo < 40, foo > 60)