Ticket #645 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

maskedarray extrema operations break on non-array types

Reported by: bsulman Owned by: somebody
Priority: normal Milestone: 1.1.0
Component: Other Version: none
Keywords: maskedarray extrema Cc:

Description

Extrema operations in maskedarray raise an exception when used on a non-array object. Example:

In [1]: import maskedarray as ma

In [2]: import numpy.core.ma as MA

In [3]: l=[1,2,3]

In [4]: max(l)
Out[4]: 3

In [5]: MA.maximum(l)
Out[5]: 3

In [6]: ma.max(l)
---------------------------------------------------------------------------
<type 'exceptions.AttributeError'>        Traceback (most recent call last)

/home/bsulman/<ipython console> in <module>()

/home/bsulman/lib/python/maskedarray/core.py in max(obj, axis, out)
   2386         raise TypeError("Output arrays Unsupported for masked arrays")
   2387     if axis is None:
-> 2388         return maximum(obj)
   2389     else:
   2390         return maximum.reduce(obj, axis)

/home/bsulman/lib/python/maskedarray/core.py in __call__(self, a, b)
   2307         "Executes the call behavior."
   2308         if b is None:
-> 2309             return self.reduce(a)
   2310         return where(self.compare(a, b), a, b)
   2311     #.........

/home/bsulman/lib/python/maskedarray/core.py in reduce(self, target, axis)
   2317         else:
   2318             kargs = {}
-> 2319             target = target.ravel()
   2320             if not (m is nomask):
   2321                 m = m.ravel()

<type 'exceptions.AttributeError'>: 'list' object has no attribute 'ravel'

The maskedarray version of _extrema_operation.reduce (line 2535 in branches/maskedarray/numpy/ma/core.py) calls target.ravel() for axis=None. (I'm using the older scipy.sandbox version of maskedarray but the line number I gave is for the maskedarray branch version and the problem still appears to be there.) This is a problem because doing a from maskedarray import * will break the builtin max and min functions for non-array objects.

Probably the easiest fix is just to call array(object) in reduce?

Thanks!

Change History

Changed 3 years ago by pierregm

  • status changed from new to closed
  • resolution set to fixed

Fixed on the numpy.maskedarray branch (rev4762).

Note: See TracTickets for help on using tickets.