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