当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy interpolate.griddata用法及代码示例


本文简要介绍 python 语言中 scipy.interpolate.griddata 的用法。

用法:

scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)#

插入非结构化D-D 数据。

参数

points 具有形状 (n, D) 的浮点数的二维 ndarray,或具有形状 (n,) 的一维 ndarray 的长度 D 元组。

数据点坐标。

values 浮点数或复数的ndarray,形状(n,)

数据值。

xi 具有形状 (m, D) 或长度为 D 的 ndarray 元组的二维 ndarray 可广播到相同形状。

插入数据的点。

method {‘linear’, ‘nearest’, ‘cubic’},可选

插值方法。之一

nearest

返回最接近插值点的数据点的值。有关详细信息,请参阅 NearestNDInterpolator

linear

将设置为 N-D 单纯形的输入点细分,并在每个单纯形上进行线性插值。有关详细信息,请参阅 LinearNDInterpolator

cubic(一维)

返回从三次样条确定的值。

cubic(二维)

返回从分段三次、连续可微 (C1) 和近似 curvature-minimizing 多项式曲面确定的值。有关详细信息,请参阅 CloughTocher2DInterpolator

fill_value 浮点数,可选

用于填充输入点凸包之外的请求点的值。如果未提供,则默认值为 nan 。此选项对‘nearest’ 方法无效。

rescale 布尔型,可选

在执行插值之前将点重新缩放到单位立方体。如果某些输入维度具有不可比较的单位并且相差许多数量级,这将很有用。

返回

ndarray

插值数组。

注意

注意

对于常规网格上的数据,请改用 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()
scipy-interpolate-griddata-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.interpolate.griddata。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。