@ user1121588 replied to this in a comment, but replied fully ...
Bitwise and ( & ) behaves in the same way as logical_and in Boolean arrays, but does not convey intentions, and also uses logical_and and increases the likelihood of receiving erroneous answers in trivial cases (possibly packed or sparse arrays).
To use logical_and on multiple arrays, do:
np.logical_and.reduce([a, b, c])
where the argument is a list of arrays as you want logical_and together. They must be the same shape.
source share