[Numpy-discussion] Bug in MaskedArray min/max functions

Philip Cooper philip.cooper at openvest.com
Wed Apr 28 12:33:16 EDT 2010


if a masked array is created and has no masked values it can have a mask of just "False" scalar false that is.

This causes an error when getting the max or min on axis=1
I don't have a fix but do offer a workaround.
If you reset the mask to the "expanded"mask all works ok (but it's a bug that pops up all over my code)

Below "a" and "m1" work but "m5" only works on axis = 0.  anyway you can look at:   (see http://www.openvest.com/trac/wiki/MaskedArrayMinMax if the formatting doesn't survive the mail posting process)

#################################
>>> import numpy as np
>>> a = np.array([np.arange(5)])
>>> a
array([[0, 1, 2, 3, 4]])
>>> m1 = np.ma.masked_values(a,1)
>>> m5 = np.ma.masked_values(a,5)
>>> m1
masked_array(data =
 [[0 -- 2 3 4]],
             mask =
 [[False  True False False False]],
       fill_value = 1)

>>> m5
masked_array(data =
 [[0 1 2 3 4]],
             mask =
 False,
       fill_value = 5)

>>> a.min(axis=0)
array([0, 1, 2, 3, 4])
>>> m5.min(axis=0)
masked_array(data = [0 1 2 3 4],
             mask = False,
       fill_value = 999999)

>>> m1.min(axis=0)
masked_array(data = [0 -- 2 3 4],
             mask = [False  True False False False],
       fill_value = 999999)

>>> a.min(axis=1)
array([0])
>>> m1.min(axis=1)
masked_array(data = [0],
             mask = [False],
       fill_value = 999999)
>>> m5.min(axis=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.6/site-packages/numpy/ma/core.py", line 5020, in min
    newmask = _mask.all(axis=axis)
ValueError: axis(=1) out of bounds
### workaround
>>> m5.mask = np.ma.getmaskarray(m5)
>>> m1.min(axis=1)
masked_array(data = [0],
             mask = [False],
       fill_value = 999999)
-- 
Philip J. Cooper (CFA)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100428/124d8fec/attachment.html>


More information about the NumPy-Discussion mailing list