Source code for esmvalcore.preprocessor._detrend
"""Preprocessor functions that remove trends from the data."""
import logging
import dask.array as da
import scipy.signal
logger = logging.getLogger(__name__)
[docs]
def detrend(cube, dimension="time", method="linear"):
"""
Detrend data along a given dimension.
Parameters
----------
cube: iris.cube.Cube
input cube.
dimension: str
Dimension to detrend
method: str
Method to detrend. Available: linear, constant. See documentation of
'scipy.signal.detrend' for details
Returns
-------
iris.cube.Cube
Detrended cube
"""
coord = cube.coord(dimension)
axis = cube.coord_dims(coord)[0]
detrended = da.apply_along_axis(
scipy.signal.detrend,
axis=axis,
arr=cube.lazy_data(),
type=method,
shape=(cube.shape[axis],),
)
return cube.copy(detrended)