Attention
This repository has been archived. Please use xarray.DataTree instead.
datatree.DataTree.interp#
- DataTree.interp(coords: Mapping[Any, Any] | None = None, method: InterpOptions = 'linear', assume_sorted: bool = False, kwargs: Mapping[str, Any] | None = None, method_non_numeric: str = 'nearest', **coords_kwargs: Any) Self [source]#
Interpolate a Dataset onto new coordinates
Performs univariate or multivariate interpolation of a Dataset onto new coordinates using scipy’s interpolation routines. If interpolating along an existing dimension,
scipy.interpolate.interp1d
is called. When interpolating along multiple existing dimensions, an attempt is made to decompose the interpolation into multiple 1-dimensional interpolations. If this is possible,scipy.interpolate.interp1d
is called. Otherwise,scipy.interpolate.interpn()
is called.- Parameters:
coords (
dict
, optional) – Mapping from dimension names to the new coordinates. New coordinate can be a scalar, array-like or DataArray. If DataArrays are passed as new coordinates, their dimensions are used for the broadcasting. Missing values are skipped.method (
{"linear", "nearest", "zero", "slinear", "quadratic", "cubic", "polynomial", "barycentric", "krogh", "pchip", "spline", "akima"}
, default:"linear"
) – String indicating which method to use for interpolation:‘linear’: linear interpolation. Additional keyword arguments are passed to
numpy.interp()
‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘polynomial’: are passed to
scipy.interpolate.interp1d()
. Ifmethod='polynomial'
, theorder
keyword argument must also be provided.‘barycentric’, ‘krogh’, ‘pchip’, ‘spline’, ‘akima’: use their respective
scipy.interpolate
classes.
assume_sorted (
bool
, default:False
) – If False, values of coordinates that are interpolated over can be in any order and they are sorted first. If True, interpolated coordinates are assumed to be an array of monotonically increasing values.kwargs (
dict
, optional) – Additional keyword arguments passed to scipy’s interpolator. Valid options and their behavior depend whetherinterp1d
orinterpn
is used.method_non_numeric (
{"nearest", "pad", "ffill", "backfill", "bfill"}
, optional) – Method for non-numeric types. Passed on toDataset.reindex()
."nearest"
is used by default.**coords_kwargs (
{dim: coordinate, ...}
, optional) – The keyword arguments form ofcoords
. One of coords or coords_kwargs must be provided.
- Returns:
interpolated (
Dataset
) – New dataset on the new coordinates.
Notes
scipy is required.
See also
scipy.interpolate.interp1d scipy.interpolate.interpn
- xarray-tutorial:fundamentals/02.2_manipulating_dimensions
Tutorial material on manipulating data resolution using
interp()
Examples
>>> ds = xr.Dataset( ... data_vars={ ... "a": ("x", [5, 7, 4]), ... "b": ( ... ("x", "y"), ... [[1, 4, 2, 9], [2, 7, 6, np.nan], [6, np.nan, 5, 8]], ... ), ... }, ... coords={"x": [0, 1, 2], "y": [10, 12, 14, 16]}, ... ) >>> ds <xarray.Dataset> Size: 176B Dimensions: (x: 3, y: 4) Coordinates: * x (x) int64 24B 0 1 2 * y (y) int64 32B 10 12 14 16 Data variables: a (x) int64 24B 5 7 4 b (x, y) float64 96B 1.0 4.0 2.0 9.0 2.0 7.0 6.0 nan 6.0 nan 5.0 8.0
1D interpolation with the default method (linear):
>>> ds.interp(x=[0, 0.75, 1.25, 1.75]) <xarray.Dataset> Size: 224B Dimensions: (x: 4, y: 4) Coordinates: * y (y) int64 32B 10 12 14 16 * x (x) float64 32B 0.0 0.75 1.25 1.75 Data variables: a (x) float64 32B 5.0 6.5 6.25 4.75 b (x, y) float64 128B 1.0 4.0 2.0 nan 1.75 ... nan 5.0 nan 5.25 nan
1D interpolation with a different method:
>>> ds.interp(x=[0, 0.75, 1.25, 1.75], method="nearest") <xarray.Dataset> Size: 224B Dimensions: (x: 4, y: 4) Coordinates: * y (y) int64 32B 10 12 14 16 * x (x) float64 32B 0.0 0.75 1.25 1.75 Data variables: a (x) float64 32B 5.0 7.0 7.0 4.0 b (x, y) float64 128B 1.0 4.0 2.0 9.0 2.0 7.0 ... nan 6.0 nan 5.0 8.0
1D extrapolation:
>>> ds.interp( ... x=[1, 1.5, 2.5, 3.5], ... method="linear", ... kwargs={"fill_value": "extrapolate"}, ... ) <xarray.Dataset> Size: 224B Dimensions: (x: 4, y: 4) Coordinates: * y (y) int64 32B 10 12 14 16 * x (x) float64 32B 1.0 1.5 2.5 3.5 Data variables: a (x) float64 32B 7.0 5.5 2.5 -0.5 b (x, y) float64 128B 2.0 7.0 6.0 nan 4.0 ... nan 12.0 nan 3.5 nan
2D interpolation:
>>> ds.interp(x=[0, 0.75, 1.25, 1.75], y=[11, 13, 15], method="linear") <xarray.Dataset> Size: 184B Dimensions: (x: 4, y: 3) Coordinates: * x (x) float64 32B 0.0 0.75 1.25 1.75 * y (y) int64 24B 11 13 15 Data variables: a (x) float64 32B 5.0 6.5 6.25 4.75 b (x, y) float64 96B 2.5 3.0 nan 4.0 5.625 ... nan nan nan nan nan