Source code for decode.utils

__all__ = ["mad"]


# dependencies
from typing import Any, Optional, cast
import numpy as np
import xarray as xr
from xarray.core.types import Dims


[docs] def mad( da: xr.DataArray, dim: Dims = None, skipna: Optional[bool] = None, keep_attrs: Optional[bool] = None, **kwargs: Any, ) -> xr.DataArray: """Calculate the median absolute deviation (MAD) of a DataArray. Args: da: Input DataArray. dim: Name of dimension(s) along which the MAD is calculated. skipna: Same-name option to be passed to ``DataArray.median``. keep_attrs: Same-name option to be passed to ``DataArray.median``. kwargs: Same-name option(s) to be passed to ``DataArray.median``. Returns: The MAD of the input DataArray. """ def median(da: xr.DataArray) -> xr.DataArray: return da.median( dim=dim, skipna=skipna, keep_attrs=keep_attrs, **kwargs, ) return median(cast(xr.DataArray, np.abs(da - median(da))))