You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
.. -*- 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).
 |