interp1d#
- class scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)[源码]#
对一维函数进行插值(遗留接口)。
x 和 y 是用于近似某个函数 f 的值数组:
y = f(x)。该类返回一个函数,其调用方法使用插值来查找新点的值。- 参数:
- x(npoints, ) array_like
实数值的一维数组。
- y(…, npoints, …) array_like
实数值的 N 维数组。y 在插值轴上的长度必须等于 x 的长度。使用
axis参数选择正确的轴。与其他插值器不同,默认插值轴是 y 的最后一个轴。- kindstr 或 int,可选
指定插值类型,可以是字符串或指定所用样条插值器阶数的整数。字符串必须是 ‘linear’、‘nearest’、‘nearest-up’、‘zero’、‘slinear’、‘quadratic’、‘cubic’、‘previous’ 或 ‘next’ 之一。‘zero’、‘slinear’、‘quadratic’ 和 ‘cubic’ 分别指零阶、一阶、二阶或三阶样条插值;‘previous’ 和 ‘next’ 仅返回点的上一个或下一个值;‘nearest-up’ 和 ‘nearest’ 在对半整数(例如 0.5、1.5)进行插值时有所不同,‘nearest-up’ 向上取整,而 ‘nearest’ 向下取整。默认为 ‘linear’。
- axisint, 可选
y数组中对应于 x 坐标值的轴。与其他插值器不同,默认值为axis=-1。- copybool,可选
如果为
True,该类将创建 x 和 y 的内部副本。如果为False,则尽可能使用对x和y的引用。默认为复制。- bounds_errorbool,可选
如果为 True,每当尝试对 x 范围之外的值进行插值(即需要外推)时,都会引发 ValueError。如果为 False,超出范围的值将被分配为
fill_value。默认情况下,除非fill_value="extrapolate",否则会引发错误。- fill_valuearray-like 或 (array-like, array_like) 或 “extrapolate”,可选
如果是 ndarray(或浮点数),此值将用于填充数据范围之外的请求点。如果未提供,则默认为 NaN。array-like 必须能正确广播到非插值轴的维度。
如果是二元元组,则第一个元素用作
x_new < x[0]的填充值,第二个元素用作x_new > x[-1]的填充值。任何不是二元元组的内容(例如列表或 ndarray,无论其形状如何)都被视为单个 array-like 参数,用于两端边界,即below, above = fill_value, fill_value。使用二元元组或 ndarray 要求bounds_error=False。0.17.0 版本中添加。
如果是 “extrapolate”,则会对数据范围之外的点进行外推。
0.17.0 版本中添加。
- assume_sortedbool,可选
如果为 False,x 的值可以是任何顺序,并将首先对其进行排序。如果为 True,x 必须是单调递增值的数组。
- 属性:
fill_value填充值。
方法
__call__(x)评估插值结果
另请参阅
splrep,splev基于 FITPACK 的样条插值/平滑。
UnivariateSplineFITPACK 例程的面向对象封装。
interp2d二维插值
附注
在输入值中存在 NaN 时调用
interp1d会导致未定义的行为。输入值 x 和 y 必须可以转换为 float 值,例如 int 或 float。
如果 x 中的值不唯一,由此产生的行为是未定义的,且取决于 kind 的选择,即更改 kind 将改变对重复值的处理方式。
数组 API 标准支持
interp1d不在支持除 NumPy 以外兼容 Python Array API 标准的后端的范围内。有关更多信息,请参阅 对数组 API 标准的支持。
示例
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy import interpolate >>> x = np.arange(0, 10) >>> y = np.exp(-x/3.0) >>> f = interpolate.interp1d(x, y)
>>> xnew = np.arange(0, 9, 0.1) >>> ynew = f(xnew) # use interpolation function returned by `interp1d` >>> plt.plot(x, y, 'o', xnew, ynew, '-') >>> plt.show()