Source code for PseudoNetCDF.userfuncs

__all__ = ['mda8', 'daymax', 'daymin', 'daymean', 'daystd', 'dayvar']
import numpy as np


[docs] def mda8(arr, axis=None, keepdims=True): """ Daily-Maximum 8-hour average concentration - can be applied to any dimensions, but make sense with time - returns the day max of the a8 Arguments: arr - array like axis - axis over which to apply mda8 keepdims - should be true Returns: out - maximum of 8 element running average. For masked inptus, only values with 6 or more valid entries are returned """ if hasattr(arr, 'mask'): arr_m = np.ma.masked_array(arr) nvalid = np.apply_along_axis( np.convolve, axis=axis, arr=~np.ma.getarraymask(arr_m), v=[1] * 8, mode='valid') arra8_m = np.ma.masked_where(nvalid < 6, np.apply_along_axis( np.convolve, axis=axis, arr=arr_m.filled(0), v=[1] * 8, mode='valid') / nvalid) arrmda8 = np.ma.masked_invalid(daymax(arra8_m, axis=axis)) else: arra8 = np.apply_along_axis( np.convolve, axis=axis, arr=arr, v=[1 / 8.] * 8, mode='valid') arrmda8 = daymax(arra8, axis=axis) return arrmda8
def _dayfunc(func, arr, axis=None, keepdims=True): """ Arguments: func - function with reduceat property arr - array_like axis - axis overwhich to apply func.reduceat keepdims - must be true Returns: out - array_like with func.reduceat applied at 24 element increments """ daystartend = np.arange(0, arr.shape[axis], 24) sliceme = (slice(None),) * axis + (slice(-1),) return func.reduceat(arr, daystartend, axis=axis)[sliceme]
[docs] def daymax(arr, axis=None, keepdims=True): """ see _dayfunc with np.maximum as func """ return _dayfunc(np.maximum, arr, axis=axis, keepdims=keepdims)
[docs] def daymin(arr, axis=None, keepdims=True): """ see _dayfunc with np.minimum as func """ return _dayfunc(np.minimum, arr, axis=axis, keepdims=keepdims)
[docs] def daymean(arr, axis=None, keepdims=True): """ see _dayfunc with np.mean as func """ return _dayfunc(np.mean, arr, axis=axis, keepdims=keepdims)
[docs] def daystd(arr, axis=None, keepdims=True): """ see _dayfunc with np.std as func """ return _dayfunc(np.std, arr, axis=axis, keepdims=keepdims)
[docs] def dayvar(arr, axis=None, keepdims=True): """ see _dayfunc with np.var as func """ return _dayfunc(np.var, arr, axis=axis, keepdims=keepdims)