[Scipysvn] r2813  trunk/Lib/sandbox/timeseries/addons
scipysvn@scip...
scipysvn@scip...
Fri Mar 2 09:44:24 CST 2007
Author: mattknox_ca
Date: 20070302 09:44:21 0600 (Fri, 02 Mar 2007)
New Revision: 2813
Modified:
trunk/Lib/sandbox/timeseries/addons/filters.py
Log:
added "centered" and "trailing" option to running_window and running_mean functions
Modified: trunk/Lib/sandbox/timeseries/addons/filters.py
===================================================================
 trunk/Lib/sandbox/timeseries/addons/filters.py 20070302 15:03:05 UTC (rev 2812)
+++ trunk/Lib/sandbox/timeseries/addons/filters.py 20070302 15:44:21 UTC (rev 2813)
@@ 85,23 +85,31 @@
#...............................................................................
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 [ik:i+k+1].


+def running_window(data, window_type, window_size,
+ centered=False, trailing=False):
+ """Applies a running window of type window_type and size window_size on the
+data. Returns a (subclass of) MaskedArray.
+
:Parameters:
data : ndarray
 Data to process. The array should be at most 2D. On 2D arrays, the window
+ 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.
+ centered : boolean, *[False]*
+ If both centered and trailing are False, then centered is forced to
+ True. If centered, the result at position i uses data points from
+ [ik:i+k+1] in the calculation. 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 [ik:i+k+1].
+ trailing : boolean, *[False]*
+ If trailing is True, the result at position i uses data points from
+ [iwindow_size:i+1] in the calculation.the first "window_size" data
+ points are always masked. When data has a missing value at position i,
+ the result has missing values in the interval [iwindow_size:i+1].
Notes

@@ 116,14 +124,24 @@
Note also that only boxcar has been thoroughly tested.
"""
 #
+
+ if not centered and not trailing:
+ centered = True
+ elif centered and trailing:
+ raise ValueError("Cannot specify both centered and trailing")
+
+
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)
 #
+ n = len(data)
+
+ if centered: k = window_size//2
+ else: k = 0
+
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:
@@ 133,25 +151,39 @@
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
+
+ if centered:
+ data._mask[:k] = data._mask[k:] = True
+ else:
+ data._mask[:window_size] = 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 [ik:i+k+1].

+def running_mean(data, width,
+ centered=False, trailing=False):
+ """Computes the running mean of size width on the data. Returns a
+(subclass of) MaskedArray.
+
: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)
+ The width of the window.
+ centered : boolean, *[False]*
+ If both centered and trailing are False, then centered is forced to
+ True. If centered, the result at position i uses data points from
+ [ik:i+k+1] in the calculation. 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 [ik:i+k+1].
+ trailing : boolean, *[False]*
+ If trailing is True, the result at position i uses data points from
+ [iwindow_size:i+1] in the calculation.the first "window_size" data
+ points are always masked. When data has a missing value at position i,
+ the result has missing values in the interval [iwindow_size:i+1]."""
+ return running_window(data, 'boxcar', width,
+ centered=centered, trailing=trailing)
+
################################################################################
if __name__ == '__main__':
from maskedarray.testutils import assert_equal, assert_almost_equal
More information about the Scipysvn
mailing list