<p dir="ltr">On 7 Jun 2013 21:58, <<a href="mailto:josef.pktd@gmail.com">josef.pktd@gmail.com</a>> wrote:<br>
><br>
> Interesting observation, (while lurking on a pull request)<br>
><br>
> >>> np.add.reduce(np.arange(5)<3)<br>
> 3<br>
> >>> np.add((np.arange(5)<3), (np.arange(5)<3))<br>
> array([ True, ¬†True, ¬†True, False, False], dtype=bool)<br>
><br>
><br>
> I often use summing of an array of boolean but didn't know the second behavior</p>
<p dir="ltr">...yeah weird. My gut reaction is that it's a bug. Addition on bools should either be an error, undefined but doable via an implicit upcast to int (analogous to calling np.sin on an int array triggering an upcast to float), or xor (i.e., addition mod 2). But apparently we're inconsistent - add.reduce upcasts, and add.__call__, uh... upcasts and then downcasts, maybe? It's like if np.sin on an int array returned ints? I can't see how to get the quoted behaviour in any conceptually coherent way. But maybe I'm missing something.</p>

<p dir="ltr">-n</p>