[Python-ideas] Changing the meaning of bool.__invert__

Robert Kern robert.kern at gmail.com
Thu Apr 7 09:08:44 EDT 2016

On 2016-04-07 13:19, Oscar Benjamin wrote:
> On 7 April 2016 at 08:46, Antoine Pitrou <solipsis at pitrou.net> wrote:

>> Numpy's boolean type does the more useful (and more expected) thing:
>>>>> ~np.bool_(True)
>> False
> This is a consequence of another unfortunate design by numpy. The
> reason for this is that numpy uses Python's bitwise operators to do
> element-wise logical operations.

This is not correct. & | ^ ~ are all genuine bitwise operations on numpy arrays.

 >>> i = np.arange(5)
 >>> ~i
array([-1, -2, -3, -4, -5])

What you are seeing with bool arrays is that bool arrays are *not* just uint8 
arrays. Each element happens to take up a single 8-bit byte, but only one of 
those bits contributes to its value; the other 7 bits are mere padding. The 
bitwise & | ^ ~ operators all work on that single bit correctly. They do not 
operate on the padding bits as they are not part of the bool's value.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

More information about the Python-ideas mailing list