# [Numpy-discussion] Ticket #794 and can o' worms.

Robert Kern robert.kern@gmail....
Sun Jul 20 20:35:30 CDT 2008

```On Sun, Jul 20, 2008 at 20:32, Charles R Harris
<charlesr.harris@gmail.com> wrote:
>
> On Sun, Jul 20, 2008 at 4:47 PM, Robert Kern <robert.kern@gmail.com> wrote:
>>
>> On Sun, Jul 20, 2008 at 17:42, Charles R Harris
>> <charlesr.harris@gmail.com> wrote:
>> > Hi All,
>> >
>> > I "fixed" ticket #754, but it leads to a ton of problems. The original
>> > discussion is here. The problems that arise come from conversion to
>> > different types.
>> >
>> > In [26]: a
>> > Out[26]: array([ Inf, -Inf,  NaN,   0.,   3.,  -3.])
>> >
>> > In [27]: sign(a).astype(int)
>> > Out[27]:
>> > array([          1,          -1, -2147483648,           0,           1,
>> >                 -1])
>> >
>> > In [28]: sign(a).astype(bool)
>> > Out[28]: array([ True,  True,  True, False,  True,  True], dtype=bool)
>> >
>> > In [29]: sign(a)
>> > Out[29]: array([  1.,  -1.,  NaN,   0.,   1.,  -1.])
>> >
>> > In [30]: bool(NaN)
>> > Out[30]: True
>> >
>> > So there are problems with at minimum the following.
>> >
>> > 1) The way NaN is converted to bool. I think it should be False.
>>
>> It's not really our choice. That's Python's bool(). For the things
>> that are our choice (e.g. array([nan]).astype(bool)) I think we should
>> stay consistent with Python.
>>
>> > 2) The way NaN is converted to int types. I think it should be 0.
>>
>> I agree. That's what int(nan) gives:
>>
>> >>> int(nan)
>> 0L
>
> So we should shoot for:
>
> nan -> bool : True
> nan -> integer kind : 0
> nan -> complex : Nan+0j
> nan -> string kind :  ?, currently it is any one of 'n', 'na', 'nan',
> depending on string length.
> nan -> object: float object nan.

Sounds right.

--
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
```