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