123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- .. -*- rest -*-
- ==================================================
- API changes in the new masked array implementation
- ==================================================
- Masked arrays are subclasses of ndarray
- ---------------------------------------
- Contrary to the original implementation, masked arrays are now regular
- ndarrays::
- >>> x = masked_array([1,2,3],mask=[0,0,1])
- >>> print isinstance(x, numpy.ndarray)
- True
- ``_data`` returns a view of the masked array
- --------------------------------------------
- Masked arrays are composed of a ``_data`` part and a ``_mask``. Accessing the
- ``_data`` part will return a regular ndarray or any of its subclass, depending
- on the initial data::
- >>> x = masked_array(numpy.matrix([[1,2],[3,4]]),mask=[[0,0],[0,1]])
- >>> print x._data
- [[1 2]
- [3 4]]
- >>> print type(x._data)
- <class 'numpy.matrixlib.defmatrix.matrix'>
- In practice, ``_data`` is implemented as a property, not as an attribute.
- Therefore, you cannot access it directly, and some simple tests such as the
- following one will fail::
- >>>x._data is x._data
- False
- ``filled(x)`` can return a subclass of ndarray
- ----------------------------------------------
- The function ``filled(a)`` returns an array of the same type as ``a._data``::
- >>> x = masked_array(numpy.matrix([[1,2],[3,4]]),mask=[[0,0],[0,1]])
- >>> y = filled(x)
- >>> print type(y)
- <class 'numpy.matrixlib.defmatrix.matrix'>
- >>> print y
- matrix([[ 1, 2],
- [ 3, 999999]])
- ``put``, ``putmask`` behave like their ndarray counterparts
- -----------------------------------------------------------
- Previously, ``putmask`` was used like this::
- mask = [False,True,True]
- x = array([1,4,7],mask=mask)
- putmask(x,mask,[3])
- which translated to::
- x[~mask] = [3]
- (Note that a ``True``-value in a mask suppresses a value.)
- In other words, the mask had the same length as ``x``, whereas
- ``values`` had ``sum(~mask)`` elements.
- Now, the behaviour is similar to that of ``ndarray.putmask``, where
- the mask and the values are both the same length as ``x``, i.e.
- ::
- putmask(x,mask,[3,0,0])
- ``fill_value`` is a property
- ----------------------------
- ``fill_value`` is no longer a method, but a property::
- >>> print x.fill_value
- 999999
- ``cumsum`` and ``cumprod`` ignore missing values
- ------------------------------------------------
- Missing values are assumed to be the identity element, i.e. 0 for
- ``cumsum`` and 1 for ``cumprod``::
- >>> x = N.ma.array([1,2,3,4],mask=[False,True,False,False])
- >>> print x
- [1 -- 3 4]
- >>> print x.cumsum()
- [1 -- 4 8]
- >> print x.cumprod()
- [1 -- 3 12]
- ``bool(x)`` raises a ValueError
- -------------------------------
- Masked arrays now behave like regular ``ndarrays``, in that they cannot be
- converted to booleans:
- ::
- >>> x = N.ma.array([1,2,3])
- >>> bool(x)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
- ==================================
- New features (non exhaustive list)
- ==================================
- ``mr_``
- -------
- ``mr_`` mimics the behavior of ``r_`` for masked arrays::
- >>> np.ma.mr_[3,4,5]
- masked_array(data = [3 4 5],
- mask = False,
- fill_value=999999)
- ``anom``
- --------
- The ``anom`` method returns the deviations from the average (anomalies).
|