scipy.interpolate.interp2d¶
- class scipy.interpolate.interp2d(x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=None)[源代码]¶
在2-D网格上插值。
x , y 和 z 是用于逼近某个函数f的值数组:
z = f(x, y)
,它返回标量值。 z 。该类返回一个函数,该函数的调用方法使用样条插值来查找新点的值。如果 x 和 y 表示规则网格,请考虑使用
RectBivariateSpline
。如果 z 是一个向量值,请考虑使用
interpn
。请注意,调用
interp2d
输入值中存在NAN会导致未定义的行为。- 参数
- x, yarray_like
定义数据点坐标的数组。
如果这些点位于规则网格上, x 可以指定列坐标和 y 行坐标,例如::
>>> x = [0,1,2]; y = [0,3]; z = [[1,2,3], [4,5,6]]
否则, x 和 y 必须指定每个点的完整坐标,例如::
>>> x = [0,1,2,0,1,2]; y = [0,0,0,3,3,3]; z = [1,2,3,4,5,6]
如果 x 和 y 是多维的,它们在使用前会被展平。
- zarray_like
要在数据点处插值的函数值。如果 z 是多维数组,则在使用前将其展平。被展平的一条线的长度 z 数组为长度 (x )*镜头 (y )如果 x 和 y 指定列和行坐标或
len(z) == len(x) == len(y)
如果 x 和 y 指定每个点的坐标。- kind{‘线性’,‘立方’,‘五次’},可选
要使用的样条线插值的类型。默认值为“线性”。
- copy布尔值,可选
如果为True,则该类创建x、y和z的内部副本。如果为False,则可以使用引用。默认情况下是复制。
- bounds_error布尔值,可选
如果为True,则在输入数据(x,y)的域外请求内插值时,将引发ValueError。如果为false,则 fill_value 是使用的。
- fill_value数字,可选
如果提供,则为插值域外的点使用的值。如果省略(无),域外的值将通过最近邻外推进行外推。
参见
RectBivariateSpline
如果输入数据位于格网上,则二维插值速度会快得多
bisplrep
,bisplev
基于FITPACK的样条插值
BivariateSpline
FITPACK例程的较新包装器
interp1d
此函数的一维版本
注意事项
沿插值轴所需的最小数据点数量为
(k+1)**2
,线性k=1,三次k=3,五次插值k=5。内插器由以下结构构成
bisplrep
,平滑因子为0。如果需要对平滑进行更多控制,bisplrep
应该直接使用。示例
构建二维栅格并在其上插值:
>>> from scipy import interpolate >>> x = np.arange(-5.01, 5.01, 0.25) >>> y = np.arange(-5.01, 5.01, 0.25) >>> xx, yy = np.meshgrid(x, y) >>> z = np.sin(xx**2+yy**2) >>> f = interpolate.interp2d(x, y, z, kind='cubic')
现在使用获得的插值函数并绘制结果:
>>> import matplotlib.pyplot as plt >>> xnew = np.arange(-5.01, 5.01, 1e-2) >>> ynew = np.arange(-5.01, 5.01, 1e-2) >>> znew = f(xnew, ynew) >>> plt.plot(x, z[0, :], 'ro-', xnew, znew[0, :], 'b-') >>> plt.show()
方法:
__call__
\(X,y[, dx, dy, assume_sorted] )对函数进行插值。