scipy.interpolate.

interp1d#

class scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)[源码]#

对一维函数进行插值(遗留接口)。

旧版

该类被视为遗留接口,将不再接收更新。虽然我们目前没有删除它的计划,但建议新代码改用更现代的替代方案。有关 interp1d 预期替代方案的指南,请参阅 一维插值

xy 是用于近似某个函数 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,则尽可能使用对 xy 的引用。默认为复制。

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 的样条插值/平滑。

UnivariateSpline

FITPACK 例程的面向对象封装。

interp2d

二维插值

附注

在输入值中存在 NaN 时调用 interp1d 会导致未定义的行为。

输入值 xy 必须可以转换为 float 值,例如 intfloat

如果 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()
../../_images/scipy-interpolate-interp1d-1.png