首页/文章/ 详情

Python几种一维插值方式的对比

1年前浏览426

上文使用Python实现数据的一维插值我们提到了使用python的scipy库进行一维插值,并且对比了线性(linear)和二次多项式(quadratic)两种方法,今天主要来介绍一下scipy.interpolate.interp1d函数的其他插值选项。

首先,interp1d函数由以下部分所组成



class scipy.interpolate.interp1d(xykind='linear', axis=- 1copy=True, bounds_error=None,fill_value=nan, assume_sorted=False)
  • x为一维数组

  • y可以是N维数组,但y 沿插值轴的长度必须等于 x 的长度

  • kind表示插值的方式(默认为‘linear’),包括 ‘linear’, ‘nearest’, ‘nearest-up’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, or ‘next’.

    “zero”、“linear”、“quadratic”和“cubic”是指零、一、二或三阶的样条插值;

    ‘previous’ 和 ‘next’ 只是返回该点的上一个或下一个值

    'nearest-up' 和 'nearest' 在对半整数(例如 0.5、1.5)进行插值时有所不同,“nearest-up”向上取整,“nearest”向下取整。

  • axis用于指定沿其进行插值的 y 轴。默认为最后一个y轴。

  • copy(布尔类型)如果为 True,则该类函数创建 x 和 y 的内部副本。如果为 False,则使用对 x 和 y 的引用。默认是True。

  • bounds_error(布尔类型)如果为 True,则在任何时候尝试对 x 范围之外的值进行插值时都会引发 ValueError(需要外插)。如果为 False,则为越界值分配 fill_value。默认情况下会报错,除非fill_value="extrapolate"。

  • fill_value如果是 ndarray(或浮点数),则此值将用于填充数据范围之外的请求点。如果未提供,则默认值为 NaN。类数组必须正确广播到非插值轴的尺寸。如果是双元素元组,则第一个元素用作 x_new < x[0] 的填充值,第二个元素用于 x_new > x[-1]。任何不是 2 元素元组的东西(例如,列表或 ndarray,无论形状如何)都被视为一个类似数组的参数,用于两个边界,如下所示,上面 = fill_value,fill_value。使用二元素元组或 ndarray 需要 bounds_error=False。


我们使用下述代码绘图进行对比























import numpy as npfrom scipy.interpolate import interp1dimport pylabA, nu, k = 10, 4, 2def f(x, A, nu, k):    return A * np.exp(-k*x) * np.cos(2*np.pi * nu * x)xmax, nx = 0.5, 8x = np.linspace(0, xmax, nx)y = f(x, A, nu, k)f_nearest = interp1d(x, y,'nearest')f_linear  = interp1d(x, y,'linear')f_cubic   = interp1d(x, y,'cubic')f_next    = interp1d(x, y, 'next')x2 = np.linspace(0, xmax, 100)pylab.plot(x, y, 'o', label='data points')pylab.plot(x2, f(x2, A, nu, k), label='exact')pylab.plot(x2, f_nearest(x2), label='nearest')pylab.plot(x2, f_linear(x2), label='linear')pylab.plot(x2, f_cubic(x2), label='cubic')pylab.plot(x2, f_next(x2), label='next')pylab.legend(loc=1)pylab.show()

可以通过上图对比各插值方式与原函数(exact)的曲线区别。

来源:易木木响叮当
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-02
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 224粉丝 283文章 355课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈