def MAD(a, c=0.6745, axis=None): """ Median Absolute Deviation along given axis of an array: median(abs(a - median(a))) / c c = 0.6745 is the constant to convert from MAD to std; it is used by default """ a = ma.masked_where(a!=a, a) if a.ndim == 1: d = ma.median(a) m = ma.median(ma.fabs(a - d) / c) else: d = ma.median(a, axis=axis) # I don't want the array to change so I have to copy it? if axis > 0: aswp = ma.swapaxes(a,0,axis) else: aswp = a m = ma.median(ma.fabs(aswp - d) / c, axis=0) return m
def bottleneck_MAD(arr, c=0.6745, axis=None): """ Median Absolute Deviation along given axis of an array: median(abs(a - median(a))) / c c = 0.6745 is the constant to convert from MAD to std; it is used by default """ from bottleneck import nanmedian import numpy as np if not arr.dtype.isnative: kind = str(arr.dtype.kind) sz = str(arr.dtype.itemsize) dt = '=' + kind + sz data = arr.astype(dt) else: data = arr if data.ndim == 1: d = nanmedian(data) m = nanmedian(ma.fabs(data - d) / c) else: d = nanmedian(data, axis=axis) if axis > 0: aswp = np.swapaxes(data, 0, axis) else: aswp = data m = nanmedian(ma.fabs(aswp - d) / c, axis=0) return m
def MAD(a, c=0.6745, axis=None): """ Median Absolute Deviation along given axis of an array: median(abs(a - median(a))) / c c = 0.6745 is the constant to convert from MAD to std; it is used by default """ a = ma.masked_where(a != a, a) if a.ndim == 1: d = ma.median(a) m = ma.median(ma.fabs(a - d) / c) else: d = ma.median(a, axis=axis) # I don't want the array to change so I have to copy it? if axis > 0: aswp = ma.swapaxes(a, 0, axis) else: aswp = a m = ma.median(ma.fabs(aswp - d) / c, axis=0) return m
def bottleneck_MAD(arr, c=0.6745, axis=None): """ Median Absolute Deviation along given axis of an array: median(abs(a - median(a))) / c c = 0.6745 is the constant to convert from MAD to std; it is used by default """ from bottleneck import nanmedian import numpy as np if not arr.dtype.isnative: kind = str(arr.dtype.kind) sz = str(arr.dtype.itemsize) dt = '=' + kind + sz data = arr.astype(dt) else: data = arr if data.ndim == 1: d = nanmedian(data) m = nanmedian(ma.fabs(data - d) / c) else: d = nanmedian(data, axis=axis) if axis > 0: aswp = np.swapaxes(data,0,axis) else: aswp = data m = nanmedian(ma.fabs(aswp - d) / c, axis=0) return m
def vec2comp(wdir, wspd, missing=MISSING): ''' Convert direction and magnitude into U, V components Parameters ---------- wdir : number, array_like Angle in meteorological degrees wspd : number, array_like Magnitudes of wind vector (input units == output units) missing : number (optional) Optional missing parameter. If not given, assume default missing value from sharppy.sharptab.constants.MISSING Returns ------- u : number, array_like (same as input) U-component of the wind (units are the same as those of input speed) v : number, array_like (same as input) V-component of the wind (units are the same as those of input speed) ''' if not QC(wdir) or not QC(wspd): return ma.masked, ma.masked wdir = ma.asanyarray(wdir).astype(np.float64) wspd = ma.asanyarray(wspd).astype(np.float64) wdir.set_fill_value(missing) wspd.set_fill_value(missing) assert wdir.shape == wspd.shape, 'wdir and wspd have different shapes' if wdir.shape: wdir[wdir == missing] = ma.masked wspd[wspd == missing] = ma.masked wdir[wspd.mask] = ma.masked wspd[wdir.mask] = ma.masked u, v = _vec2comp(wdir, wspd) u[np.fabs(u) < TOL] = 0. v[np.fabs(v) < TOL] = 0. else: if wdir == missing: wdir = ma.masked wspd = ma.masked elif wspd == missing: wdir = ma.masked wspd = ma.masked u, v = _vec2comp(wdir, wspd) if ma.fabs(u) < TOL: u = 0. if ma.fabs(v) < TOL: v = 0. return u, v
def MAD(a, c=0.6745, axis=None): a = ma.masked_where(a!=a, a) if a.ndim == 1: d = ma.median(a) m = ma.median(ma.fabs(a - d) / c) else: d = ma.median(a, axis=axis) # I don't want the array to change so I have to copy it? if axis > 0: aswp = ma.swapaxes(a,0,axis) else: aswp = a m = ma.median(ma.fabs(aswp - d) / c, axis=0) return m
def MAD(a, c=0.6745, axis=None): """ Median Absolute Deviation along given axis of an array: median(abs(a - median(a))) / c c = 0.6745 is the constant to convert from MAD to std """ a = ma.masked_where(a!=a, a) if a.ndim == 1: d = ma.median(a) m = ma.median(ma.fabs(a - d) / c) else: d = ma.median(a, axis=axis) if axis > 0: aswp = ma.swapaxes(a,0,axis) else: aswp = a m = ma.median(ma.fabs(aswp - d) / c, axis=0) return m