scipy.interpolate.
griddata#
- scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)[源代码][源代码]#
插值非结构化的 D-D 数据。
- 参数:
- 点形状为 (n, D) 的浮点数 2-D ndarray,或形状为 (n,) 的长度为 D 的 1-D ndarray 元组。
数据点坐标。
- 值浮点数或复数的 ndarray,形状为 (n,)
数据值。
- xi形状为 (m, D) 的浮点数 2-D ndarray,或长度为 D 的元组,其 ndarray 可广播到相同形状。
插值数据的点。
- 方法{‘linear’, ‘nearest’, ‘cubic’}, 可选
插值方法。其中之一
nearest
返回最接近插值点的数据点的值。更多详情请参见
NearestNDInterpolator
。linear
将输入点集镶嵌为 N-D 单纯形,并在每个单纯形上线性插值。更多详情请参见
LinearNDInterpolator
。cubic
(1-D)返回从三次样条曲线确定的结果。
cubic
(2-D)返回从分段三次、连续可微(C1)且近似曲率最小化的多项式曲面确定的结果。更多详情请参见
CloughTocher2DInterpolator
。
- fill_valuefloat, 可选
用于填充输入点凸包外请求点的值。如果未提供,则默认值为
nan
。此选项对 ‘nearest’ 方法无效。- 重新缩放bool, 可选
在进行插值之前,将点重新缩放到单位立方体。如果某些输入维度的单位不可比,并且相差许多数量级,这将非常有用。
Added in version 0.14.0.
- 返回:
- ndarray
插值值的数组。
参见
LinearNDInterpolator
N 维的分段线性插值器。
NearestNDInterpolator
N 维中的最近邻插值器。
CloughTocher2DInterpolator
二维分段三次、C1 光滑、曲率最小化的插值器。
interpn
在规则网格或矩形网格上的插值。
RegularGridInterpolator
在任意维度的规则或矩形网格上的插值器(
interpn
封装了这个类)。
注释
Added in version 0.9.
备注
对于规则网格上的数据,请改用
interpn
。示例
假设我们想要插值二维函数
>>> import numpy as np >>> def func(x, y): ... return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
在 [0, 1]x[0, 1] 的网格上
>>> grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
但我们只知道它在1000个数据点上的值:
>>> rng = np.random.default_rng() >>> points = rng.random((1000, 2)) >>> values = func(points[:,0], points[:,1])
这可以通过
griddata
完成 – 下面我们尝试所有插值方法:>>> from scipy.interpolate import griddata >>> grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest') >>> grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear') >>> grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')
可以看出,所有方法在某种程度上都再现了精确结果,但对于这种平滑函数,分段三次插值给出了最佳结果:
>>> import matplotlib.pyplot as plt >>> plt.subplot(221) >>> plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower') >>> plt.plot(points[:,0], points[:,1], 'k.', ms=1) >>> plt.title('Original') >>> plt.subplot(222) >>> plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Nearest') >>> plt.subplot(223) >>> plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Linear') >>> plt.subplot(224) >>> plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower') >>> plt.title('Cubic') >>> plt.gcf().set_size_inches(6, 6) >>> plt.show()