[Numpy-discussion] Why does np.nan{min, max} clobber my array mask?

Bruce Southey bsouthey@gmail....
Fri Mar 5 09:16:54 CST 2010


On Mon, Feb 15, 2010 at 9:24 PM, Bruce Southey <bsouthey@gmail.com> wrote:
> On Mon, Feb 15, 2010 at 8:35 PM, Pierre GM <pgmdevlist@gmail.com> wrote:
>> On Feb 15, 2010, at 8:51 PM, David Carmean wrote:
>>> On Sun, Feb 14, 2010 at 03:22:04PM -0500, Pierre GM wrote:
>>>
>>>>
>>>> I'm sorry, I can't follow you. Can you post a simpler self-contained example I can play with ?
>>>> Why using np.nanmin/max ? These functions are designed for ndarrays, to avoid using a masked array: can't you just use min/max on the masked array ?
>>>
>>> I was using np.nanmin/max because I did not yet understand how masked arrays worked; perhaps the
>>> docs for those methods need a note indicating that "If you can take the (small?) memory hit,
>>> use Masked Arrays instead".   Now that I know different... I'm  going to drop it unless you
>>> reall want to dig into it.
>>
>>
>> I'm curious. Can you post an excerpt of your array, so that I can check what goes wrong?
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
> Hi,
> David, please file a bug report.
>
> I think is occurs with np.nansum, np.nanmin and np.nanmax. Perhaps
> some thing with the C99 changes as I think it exists with numpy 1.3.
>
> I think this code shows the problem with Linux and recent numpy svn:
>
> import numpy as np
> uut = np.array([[2, 1, 3, np.nan], [5, 2, 3, np.nan]])
> msk = np.ma.masked_invalid(uut)
> msk
> np.nanmin(msk, axis=1)
> msk
>
> $ python
> Python 2.6 (r26:66714, Nov  3 2009, 17:33:18)
> [GCC 4.4.1 20090725 (Red Hat 4.4.1-2)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import numpy as np
>>>> uut = np.array([[2, 1, 3, np.nan], [5, 2, 3, np.nan]])
>>>> msk = np.ma.masked_invalid(uut)
>>>> msk
> masked_array(data =
>  [[2.0 1.0 3.0 --]
>  [5.0 2.0 3.0 --]],
>             mask =
>  [[False False False  True]
>  [False False False  True]],
>       fill_value = 1e+20)
>
>>>> np.nanmin(msk, axis=1)
> masked_array(data = [1.0 2.0],
>             mask = [False False],
>       fill_value = 1e+20)
>
>>>> msk
> masked_array(data =
>  [[2.0 1.0 3.0 nan]
>  [5.0 2.0 3.0 nan]],
>             mask =
>  [[False False False False]
>  [False False False False]],
>       fill_value = 1e+20)
>
>
> Bruce
>

Hi,
I filed this ticket and hopefully the provided code is sufficient for a test:
http://projects.scipy.org/numpy/ticket/1421

The bug is with the _nanop function because nansum, nanmin, nanmax,
nanargmin and nanargmax have the same issue.

Bruce



Bruce


More information about the NumPy-Discussion mailing list