Skip to content

Commit 8c863c9

Browse files
authored
examples for interp and interpolate_na (#4621)
* add examples to interp * add examples to interpolate_na * add examples to DataArray.interp * add examples to Dataset.interpolate_na * fix the doctest examples * use integers as example data * fix the sphinx errors
1 parent 255bc8e commit 8c863c9

File tree

2 files changed

+208
-5
lines changed

2 files changed

+208
-5
lines changed

xarray/core/dataarray.py

+88-5
Original file line numberDiff line numberDiff line change
@@ -1519,12 +1519,71 @@ def interp(
15191519
15201520
Examples
15211521
--------
1522-
>>> da = xr.DataArray([1, 3], [("x", np.arange(2))])
1523-
>>> da.interp(x=0.5)
1524-
<xarray.DataArray ()>
1525-
array(2.)
1522+
>>> da = xr.DataArray(
1523+
... data=[[1, 4, 2, 9], [2, 7, 6, np.nan], [6, np.nan, 5, 8]],
1524+
... dims=("x", "y"),
1525+
... coords={"x": [0, 1, 2], "y": [10, 12, 14, 16]},
1526+
... )
1527+
>>> da
1528+
<xarray.DataArray (x: 3, y: 4)>
1529+
array([[ 1., 4., 2., 9.],
1530+
[ 2., 7., 6., nan],
1531+
[ 6., nan, 5., 8.]])
1532+
Coordinates:
1533+
* x (x) int64 0 1 2
1534+
* y (y) int64 10 12 14 16
1535+
1536+
1D linear interpolation (the default):
1537+
1538+
>>> da.interp(x=[0, 0.75, 1.25, 1.75])
1539+
<xarray.DataArray (x: 4, y: 4)>
1540+
array([[1. , 4. , 2. , nan],
1541+
[1.75, 6.25, 5. , nan],
1542+
[3. , nan, 5.75, nan],
1543+
[5. , nan, 5.25, nan]])
15261544
Coordinates:
1527-
x float64 0.5
1545+
* y (y) int64 10 12 14 16
1546+
* x (x) float64 0.0 0.75 1.25 1.75
1547+
1548+
1D nearest interpolation:
1549+
1550+
>>> da.interp(x=[0, 0.75, 1.25, 1.75], method="nearest")
1551+
<xarray.DataArray (x: 4, y: 4)>
1552+
array([[ 1., 4., 2., 9.],
1553+
[ 2., 7., 6., nan],
1554+
[ 2., 7., 6., nan],
1555+
[ 6., nan, 5., 8.]])
1556+
Coordinates:
1557+
* y (y) int64 10 12 14 16
1558+
* x (x) float64 0.0 0.75 1.25 1.75
1559+
1560+
1D linear extrapolation:
1561+
1562+
>>> da.interp(
1563+
... x=[1, 1.5, 2.5, 3.5],
1564+
... method="linear",
1565+
... kwargs={"fill_value": "extrapolate"},
1566+
... )
1567+
<xarray.DataArray (x: 4, y: 4)>
1568+
array([[ 2. , 7. , 6. , nan],
1569+
[ 4. , nan, 5.5, nan],
1570+
[ 8. , nan, 4.5, nan],
1571+
[12. , nan, 3.5, nan]])
1572+
Coordinates:
1573+
* y (y) int64 10 12 14 16
1574+
* x (x) float64 1.0 1.5 2.5 3.5
1575+
1576+
2D linear interpolation:
1577+
1578+
>>> da.interp(x=[0, 0.75, 1.25, 1.75], y=[11, 13, 15], method="linear")
1579+
<xarray.DataArray (x: 4, y: 3)>
1580+
array([[2.5 , 3. , nan],
1581+
[4. , 5.625, nan],
1582+
[ nan, nan, nan],
1583+
[ nan, nan, nan]])
1584+
Coordinates:
1585+
* x (x) float64 0.0 0.75 1.25 1.75
1586+
* y (y) int64 11 13 15
15281587
"""
15291588
if self.dtype.kind not in "uifc":
15301589
raise TypeError(
@@ -2311,6 +2370,29 @@ def interpolate_na(
23112370
--------
23122371
numpy.interp
23132372
scipy.interpolate
2373+
2374+
Examples
2375+
--------
2376+
>>> da = xr.DataArray(
2377+
... [np.nan, 2, 3, np.nan, 0], dims="x", coords={"x": [0, 1, 2, 3, 4]}
2378+
... )
2379+
>>> da
2380+
<xarray.DataArray (x: 5)>
2381+
array([nan, 2., 3., nan, 0.])
2382+
Coordinates:
2383+
* x (x) int64 0 1 2 3 4
2384+
2385+
>>> da.interpolate_na(dim="x", method="linear")
2386+
<xarray.DataArray (x: 5)>
2387+
array([nan, 2. , 3. , 1.5, 0. ])
2388+
Coordinates:
2389+
* x (x) int64 0 1 2 3 4
2390+
2391+
>>> da.interpolate_na(dim="x", method="linear", fill_value="extrapolate")
2392+
<xarray.DataArray (x: 5)>
2393+
array([1. , 2. , 3. , 1.5, 0. ])
2394+
Coordinates:
2395+
* x (x) int64 0 1 2 3 4
23142396
"""
23152397
from .missing import interp_na
23162398

@@ -3496,6 +3578,7 @@ def map_blocks(
34963578
... gb = da.groupby(groupby_type)
34973579
... clim = gb.mean(dim="time")
34983580
... return gb - clim
3581+
...
34993582
>>> time = xr.cftime_range("1990-01", "1992-01", freq="M")
35003583
>>> month = xr.DataArray(time.month, coords={"time": time}, dims=["time"])
35013584
>>> np.random.seed(123)

xarray/core/dataset.py

+120
Original file line numberDiff line numberDiff line change
@@ -2711,6 +2711,80 @@ def interp(
27112711
--------
27122712
scipy.interpolate.interp1d
27132713
scipy.interpolate.interpn
2714+
2715+
Examples
2716+
--------
2717+
>>> ds = xr.Dataset(
2718+
... data_vars={
2719+
... "a": ("x", [5, 7, 4]),
2720+
... "b": (
2721+
... ("x", "y"),
2722+
... [[1, 4, 2, 9], [2, 7, 6, np.nan], [6, np.nan, 5, 8]],
2723+
... ),
2724+
... },
2725+
... coords={"x": [0, 1, 2], "y": [10, 12, 14, 16]},
2726+
... )
2727+
>>> ds
2728+
<xarray.Dataset>
2729+
Dimensions: (x: 3, y: 4)
2730+
Coordinates:
2731+
* x (x) int64 0 1 2
2732+
* y (y) int64 10 12 14 16
2733+
Data variables:
2734+
a (x) int64 5 7 4
2735+
b (x, y) float64 1.0 4.0 2.0 9.0 2.0 7.0 6.0 nan 6.0 nan 5.0 8.0
2736+
2737+
1D interpolation with the default method (linear):
2738+
2739+
>>> ds.interp(x=[0, 0.75, 1.25, 1.75])
2740+
<xarray.Dataset>
2741+
Dimensions: (x: 4, y: 4)
2742+
Coordinates:
2743+
* y (y) int64 10 12 14 16
2744+
* x (x) float64 0.0 0.75 1.25 1.75
2745+
Data variables:
2746+
a (x) float64 5.0 6.5 6.25 4.75
2747+
b (x, y) float64 1.0 4.0 2.0 nan 1.75 6.25 ... nan 5.0 nan 5.25 nan
2748+
2749+
1D interpolation with a different method:
2750+
2751+
>>> ds.interp(x=[0, 0.75, 1.25, 1.75], method="nearest")
2752+
<xarray.Dataset>
2753+
Dimensions: (x: 4, y: 4)
2754+
Coordinates:
2755+
* y (y) int64 10 12 14 16
2756+
* x (x) float64 0.0 0.75 1.25 1.75
2757+
Data variables:
2758+
a (x) float64 5.0 7.0 7.0 4.0
2759+
b (x, y) float64 1.0 4.0 2.0 9.0 2.0 7.0 ... 6.0 nan 6.0 nan 5.0 8.0
2760+
2761+
1D extrapolation:
2762+
2763+
>>> ds.interp(
2764+
... x=[1, 1.5, 2.5, 3.5],
2765+
... method="linear",
2766+
... kwargs={"fill_value": "extrapolate"},
2767+
... )
2768+
<xarray.Dataset>
2769+
Dimensions: (x: 4, y: 4)
2770+
Coordinates:
2771+
* y (y) int64 10 12 14 16
2772+
* x (x) float64 1.0 1.5 2.5 3.5
2773+
Data variables:
2774+
a (x) float64 7.0 5.5 2.5 -0.5
2775+
b (x, y) float64 2.0 7.0 6.0 nan 4.0 nan ... 4.5 nan 12.0 nan 3.5 nan
2776+
2777+
2D interpolation:
2778+
2779+
>>> ds.interp(x=[0, 0.75, 1.25, 1.75], y=[11, 13, 15], method="linear")
2780+
<xarray.Dataset>
2781+
Dimensions: (x: 4, y: 3)
2782+
Coordinates:
2783+
* x (x) float64 0.0 0.75 1.25 1.75
2784+
* y (y) int64 11 13 15
2785+
Data variables:
2786+
a (x) float64 5.0 6.5 6.25 4.75
2787+
b (x, y) float64 2.5 3.0 nan 4.0 5.625 nan nan nan nan nan nan nan
27142788
"""
27152789
from . import missing
27162790

@@ -4244,6 +4318,50 @@ def interpolate_na(
42444318
--------
42454319
numpy.interp
42464320
scipy.interpolate
4321+
4322+
Examples
4323+
--------
4324+
>>> ds = xr.Dataset(
4325+
... {
4326+
... "A": ("x", [np.nan, 2, 3, np.nan, 0]),
4327+
... "B": ("x", [3, 4, np.nan, 1, 7]),
4328+
... "C": ("x", [np.nan, np.nan, np.nan, 5, 0]),
4329+
... "D": ("x", [np.nan, 3, np.nan, -1, 4]),
4330+
... },
4331+
... coords={"x": [0, 1, 2, 3, 4]},
4332+
... )
4333+
>>> ds
4334+
<xarray.Dataset>
4335+
Dimensions: (x: 5)
4336+
Coordinates:
4337+
* x (x) int64 0 1 2 3 4
4338+
Data variables:
4339+
A (x) float64 nan 2.0 3.0 nan 0.0
4340+
B (x) float64 3.0 4.0 nan 1.0 7.0
4341+
C (x) float64 nan nan nan 5.0 0.0
4342+
D (x) float64 nan 3.0 nan -1.0 4.0
4343+
4344+
>>> ds.interpolate_na(dim="x", method="linear")
4345+
<xarray.Dataset>
4346+
Dimensions: (x: 5)
4347+
Coordinates:
4348+
* x (x) int64 0 1 2 3 4
4349+
Data variables:
4350+
A (x) float64 nan 2.0 3.0 1.5 0.0
4351+
B (x) float64 3.0 4.0 2.5 1.0 7.0
4352+
C (x) float64 nan nan nan 5.0 0.0
4353+
D (x) float64 nan 3.0 1.0 -1.0 4.0
4354+
4355+
>>> ds.interpolate_na(dim="x", method="linear", fill_value="extrapolate")
4356+
<xarray.Dataset>
4357+
Dimensions: (x: 5)
4358+
Coordinates:
4359+
* x (x) int64 0 1 2 3 4
4360+
Data variables:
4361+
A (x) float64 1.0 2.0 3.0 1.5 0.0
4362+
B (x) float64 3.0 4.0 2.5 1.0 7.0
4363+
C (x) float64 20.0 15.0 10.0 5.0 0.0
4364+
D (x) float64 5.0 3.0 1.0 -1.0 4.0
42474365
"""
42484366
from .missing import _apply_over_vars_with_dim, interp_na
42494367

@@ -5794,6 +5912,7 @@ def filter_by_attrs(self, **kwargs):
57945912
Examples
57955913
--------
57965914
>>> # Create an example dataset:
5915+
...
57975916
>>> import numpy as np
57985917
>>> import pandas as pd
57995918
>>> import xarray as xr
@@ -5974,6 +6093,7 @@ def map_blocks(
59746093
... gb = da.groupby(groupby_type)
59756094
... clim = gb.mean(dim="time")
59766095
... return gb - clim
6096+
...
59776097
>>> time = xr.cftime_range("1990-01", "1992-01", freq="M")
59786098
>>> month = xr.DataArray(time.month, coords={"time": time}, dims=["time"])
59796099
>>> np.random.seed(123)

0 commit comments

Comments
 (0)