[Scipy-svn] r2906 - trunk/Lib/sandbox/timeseries/addons

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Apr 12 10:13:54 EDT 2007


Author: mattknox_ca
Date: 2007-04-12 09:13:39 -0500 (Thu, 12 Apr 2007)
New Revision: 2906

Modified:
   trunk/Lib/sandbox/timeseries/addons/filters.py
Log:
moved functions into moving_funcs

Modified: trunk/Lib/sandbox/timeseries/addons/filters.py
===================================================================
--- trunk/Lib/sandbox/timeseries/addons/filters.py	2007-04-12 14:12:43 UTC (rev 2905)
+++ trunk/Lib/sandbox/timeseries/addons/filters.py	2007-04-12 14:13:39 UTC (rev 2906)
@@ -21,140 +21,8 @@
 from maskedarray import MaskedArray, nomask, getmask, getmaskarray, masked
 marray = MA.array
 
+from moving_funcs import mov_average_expw, cmov_average, cmov_mean, \
+                         cmov_window
 
-__all__ = ['expmave'
-           'running_window', 'running_mean'           
-           ]
-
-#####---------------------------------------------------------------------------
-#---- --- Moving average functions ---
-#####---------------------------------------------------------------------------
-def expmave(data, n, tol=1e-6):
-    """Calculates the exponential moving average of a series.
-
-:Parameters:
-    data : ndarray
-        Data as a valid (subclass of) ndarray or MaskedArray. In particular, 
-        TimeSeries objects are valid here.
-    n : int 
-        Time periods. The smoothing factor is 2/(n + 1)
-    tol : float, *[1e-6]*
-        Tolerance for the definition of the mask. When data contains masked 
-        values, this parameter determinea what points in the result should be masked.
-        Values in the result that would not be "significantly" impacted (as 
-        determined by this parameter) by the masked values are left unmasked.
-"""
-    data = marray(data, copy=True, subok=True)
-    ismasked = (data._mask is not nomask)
-    data._mask = N.zeros(data.shape, bool_)
-    _data = data._data
-    #
-    k = 2./float(n + 1)
-    def expmave_sub(a, b):
-        return b + k * (a - b)
-    #
-    data._data.flat = N.frompyfunc(expmave_sub, 2, 1).accumulate(_data)
-    if ismasked:
-        _unmasked = N.logical_not(data._mask).astype(float_)
-        marker = 1. - N.frompyfunc(expmave_sub, 2, 1).accumulate(_unmasked)
-        data._mask[marker > tol] = True
-    data._mask[0] = True
-    #
-    return data
-
-def weightmave(data, n):
-    data = marray(data, subok=True, copy=True)
-    data._mask = N.zeros(data.shape, bool_)
-    # Set the data
-    _data = data._data
-    tmp = N.empty_like(_data)
-    tmp[:n] = _data[:n]
-    s = 0
-    for i in range(n, len(data)):
-        s += _data[i] - _data[i-n]
-        tmp[i] = n*_data[i] + tmp[i-1] - s
-    tmp *= 2./(n*(n+1))
-    data._data.flat = tmp
-    # Set the mask
-    if data._mask is not nomask:
-        msk = data._mask.nonzero()[0].repeat(n).reshape(-1,n)
-        msk += range(n)
-        data._mask[msk.ravel()] = True
-    data._mask[:n] = True
-    return data
-
-
-#...............................................................................
-def running_window(data, window_type, window_size):
-    """Applies a running window of type window_type and size window_size on the 
-    data.
-    
-    Returns a (subclass of) MaskedArray. The k first and k last data are always 
-    masked (with k=window_size//2). When data has a missing value at position i, 
-    the result has missing values in the interval [i-k:i+k+1].
-    
-    
-:Parameters:
-    data : ndarray
-        Data to process. The array should be at most 2D. On 2D arrays, the window
-        is applied recursively on each column.
-    window_type : string/tuple/float
-        Window type (see Notes)
-    window_size : integer
-        The width of the window.
-        
-Notes
------
-
-The recognized window types are: boxcar, triang, blackman, hamming, hanning, 
-bartlett, parzen, bohman, blackmanharris, nuttall, barthann, kaiser (needs beta), 
-gaussian (needs std), general_gaussian (needs power, width), slepian (needs width).
-If the window requires parameters, the window_type argument should be a tuple
-with the first argument the string name of the window, and the next arguments 
-the needed parameters. If window_type is a floating point number, it is interpreted 
-as the beta parameter of the kaiser window.
-
-Note also that only boxcar has been thoroughly tested.
-    """
-    #
-    data = marray(data, copy=True, subok=True)
-    if data._mask is nomask:
-        data._mask = N.zeros(data.shape, bool_)
-    window = get_window(window_type, window_size, fftbins=False)
-    (n, k) = (len(data), window_size//2)
-    #
-    if data.ndim == 1:
-        data._data.flat = convolve(data._data, window)[k:n+k] / float(window_size)
-        data._mask[:] = ((convolve(getmaskarray(data), window) > 0)[k:n+k])
-    elif data.ndim == 2:
-        for i in range(data.shape[-1]):
-            _data = data._data[:,i]
-            _data.flat = convolve(_data, window)[k:n+k] / float(window_size)
-            data._mask[:,i] = (convolve(data._mask[:,i], window) > 0)[k:n+k]
-    else:
-        raise ValueError, "Data should be at most 2D"
-    data._mask[:k] = data._mask[-k:] = True
-    return data
-
-def running_mean(data, width):
-    """Computes the running mean of size width on the data.
-    
-    Returns a (subclass of) MaskedArray. The k first and k last data are always 
-    masked (with k=window_size//2). When data has a missing value at position i, 
-    the result has missing values in the interval [i-k:i+k+1].
-    
-:Parameters:
-    data : ndarray
-        Data to process. The array should be at most 2D. On 2D arrays, the window
-        is applied recursively on each column.
-    window_size : integer
-        The width of the window.    
-    """
-    return running_window(data, 'boxcar', width)
-
-################################################################################
-if __name__ == '__main__':
-    from maskedarray.testutils import assert_equal, assert_almost_equal
-    from timeseries import time_series, thisday
-    #
-    data = MA.arange(100)
+__all__ = ['mov_average_expw'
+           'cmov_average', 'cmov_mean', 'cmov_window']




More information about the Scipy-svn mailing list