scipy.interpolate.RegularGridInterpolator#
- class scipy.interpolate.RegularGridInterpolator(points, values, method='linear', bounds_error=True, fill_value=nan)[source]#
Interpolation on a regular or rectilinear grid in arbitrary dimensions.
The data must be defined on a rectilinear grid; that is, a rectangular grid with even or uneven spacing. Linear, nearest-neighbor, spline interpolations are supported. After setting up the interpolator object, the interpolation method may be chosen at each evaluation.
- Parameters
- pointstuple of ndarray of float, with shapes (m1, ), …, (mn, )
The points defining the regular grid in n dimensions. The points in each dimension (i.e. every elements of the points tuple) must be strictly ascending or descending.
- valuesarray_like, shape (m1, …, mn, …)
The data on the regular grid in n dimensions. Complex data can be acceptable.
- methodstr, optional
The method of interpolation to perform. Supported are “linear”, “nearest”, “slinear”, “cubic”, and “quintic”. This parameter will become the default for the object’s
__call__
method. Default is “linear”.- bounds_errorbool, optional
If True, when interpolated values are requested outside of the domain of the input data, a ValueError is raised. If False, then fill_value is used. Default is True.
- fill_valuefloat or None, optional
The value to use for points outside of the interpolation domain. If None, values outside the domain are extrapolated. Default is
np.nan
.
See also
NearestNDInterpolator
Nearest neighbor interpolation on unstructured data in N dimensions
LinearNDInterpolator
Piecewise linear interpolant on unstructured data in N dimensions
interpn
a convenience function which wraps
RegularGridInterpolator
scipy.ndimage.map_coordinates
interpolation on grids with equal spacing (suitable for e.g., N-D image resampling)
Notes
Contrary to
LinearNDInterpolator
andNearestNDInterpolator
, this class avoids expensive triangulation of the input data by taking advantage of the regular grid structure.In other words, this class assumes that the data is defined on a rectilinear grid.
New in version 0.14.
The ‘slinear’(k=1), ‘cubic’(k=3), and ‘quintic’(k=5) methods are tensor-product spline interpolators, where k is the spline degree, If any dimension has fewer points than k + 1, an error will be raised.
New in version 1.9.
References
- 1
Python package regulargrid by Johannes Buchner, see https://pypi.python.org/pypi/regulargrid/
- 2
Wikipedia, “Trilinear interpolation”, https://en.wikipedia.org/wiki/Trilinear_interpolation
- 3
Weiser, Alan, and Sergio E. Zarantonello. “A note on piecewise linear and multilinear table interpolation in many dimensions.” MATH. COMPUT. 50.181 (1988): 189-196. https://www.ams.org/journals/mcom/1988-50-181/S0025-5718-1988-0917826-0/S0025-5718-1988-0917826-0.pdf DOI:10.1090/S0025-5718-1988-0917826-0
Examples
Evaluate a function on the points of a 3-D grid
As a first example, we evaluate a simple example function on the points of a 3-D grid:
>>> from scipy.interpolate import RegularGridInterpolator >>> def f(x, y, z): ... return 2 * x**3 + 3 * y**2 - z >>> x = np.linspace(1, 4, 11) >>> y = np.linspace(4, 7, 22) >>> z = np.linspace(7, 9, 33) >>> xg, yg ,zg = np.meshgrid(x, y, z, indexing='ij', sparse=True) >>> data = f(xg, yg, zg)
data
is now a 3-D array withdata[i, j, k] = f(x[i], y[j], z[k])
. Next, define an interpolating function from this data:>>> interp = RegularGridInterpolator((x, y, z), data)
Evaluate the interpolating function at the two points
(x,y,z) = (2.1, 6.2, 8.3)
and(3.3, 5.2, 7.1)
:>>> pts = np.array([[2.1, 6.2, 8.3], ... [3.3, 5.2, 7.1]]) >>> interp(pts) array([ 125.80469388, 146.30069388])
which is indeed a close approximation to
>>> f(2.1, 6.2, 8.3), f(3.3, 5.2, 7.1) (125.54200000000002, 145.894)
Interpolate and extrapolate a 2D dataset
As a second example, we interpolate and extrapolate a 2D data set:
>>> x, y = np.array([-2, 0, 4]), np.array([-2, 0, 2, 5]) >>> def ff(x, y): ... return x**2 + y**2
>>> xg, yg = np.meshgrid(x, y, indexing='ij') >>> data = ff(xg, yg) >>> interp = RegularGridInterpolator((x, y), data, ... bounds_error=False, fill_value=None)
>>> import matplotlib.pyplot as plt >>> fig = plt.figure() >>> ax = fig.add_subplot(projection='3d') >>> ax.scatter(xg.ravel(), yg.ravel(), data.ravel(), ... s=60, c='k', label='data')
Evaluate and plot the interpolator on a finer grid
>>> xx = np.linspace(-4, 9, 31) >>> yy = np.linspace(-4, 9, 31) >>> X, Y = np.meshgrid(xx, yy, indexing='ij')
>>> # interpolator >>> ax.plot_wireframe(X, Y, interp((X, Y)), rstride=3, cstride=3, ... alpha=0.4, color='m', label='linear interp')
>>> # ground truth >>> ax.plot_wireframe(X, Y, ff(X, Y), rstride=3, cstride=3, ... alpha=0.4, label='ground truth') >>> plt.legend() >>> plt.show()
Other examples are given in the tutorial.
- Attributes
- gridtuple of ndarrays
The points defining the regular grid in n dimensions. This tuple defines the full grid via
np.meshgrid(*grid, indexing='ij')
- valuesndarray
Data values at the grid.
- methodstr
Interpolation method.
- fill_valuefloat or
None
Use this value for out-of-bounds arguments to
__call__
.- bounds_errorbool
If
True
, out-of-bounds argument raise aValueError
.
Methods
__call__
(xi[, method])Interpolation at coordinates.