You can use the tilde if the array's dtype
is boolean and you are sure that this won't change as the software matures. However, np.logical_not
has two advantages:
- It also works for object arrays, which can easily show up if
np.nan
s or other objects make it into your array.
- Its meaning is clear to anyone with a little background in logics.
There is also np.invert
but it doesn't work with object arrays and the word is ambiguous.
~np.array([False, True], dtype=bool)
Out[7]: array([ True, False])
~np.array([False, True], dtype=object)
Out[9]: array([-1, -2], dtype=object)
np.invert([True, False])
Out[4]: array([False, True])
np.invert((np.array([True, False], dtype=object)))
Out[5]: array([-2, -1], dtype=object)
np.logical_not(np.array([False, True], dtype=bool))
Out[8]: array([ True, False])
np.logical_not(np.array([False, True], dtype=object))
Out[10]: array([True, False], dtype=object)