[Numpy-discussion] numpy masked array oddity

Robert Kern robert.kern at gmail.com
Mon May 5 13:33:20 EDT 2008


On Mon, May 5, 2008 at 12:19 PM, Russell E. Owen <rowen at cesmail.net> wrote:
> The object returned by maskedArray.compressed() appears to be a normal
>  numpy array (based on repr output), but in reality it has some
>  surprising differences:
>
>  import numpy
>  a = numpy.arange(10, dtype=int)
>  b = numpy.zeros(10)
>  b[1] = 1
>  b[3] = 1
>  ma = numpy.core.ma.array(a, mask=b, dtype=float)
>  print ma
>  # [0.0 -- 2.0 -- 4.0 5.0 6.0 7.0 8.0 9.0]
>  c = ma.compressed()
>  print repr(c)
>  # array([ 0.  2.  4.  5.  6.  7.  8.  9.])
>  c.sort()
>  #Traceback (most recent call last):
>  #  File "<stdin>", line 1, in <module>
>  #  File
>  "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-pac
>  kages/#numpy/core/ma.py", line 2132, in not_implemented
>  #    raise NotImplementedError, "not yet implemented for numpy.ma arrays"
>  #NotImplementedError: not yet implemented for numpy.ma arrays
>  d = numpy.array(c)
>  d.sort()
>  # this works fine, as expected
>
>  Why is "c" in the example above not just a regular numpy array? It is
>  not a "live" view (based on a quick test), which seems sensible to me.
>  I've worked around the problem by making a copy (d in the example
>  above), but it seems most unfortunate to have to copy the data twice.

I don't know the reason why it's not an ndarray, but you don't have to
copy the data again to get one:

  c = ma.compressed().view(numpy.ndarray)

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



More information about the NumPy-Discussion mailing list