Python 为沿y轴上升的点插值平滑路径

Python 为沿y轴上升的点插值平滑路径,python,scipy,interpolation,curve-fitting,Python,Scipy,Interpolation,Curve Fitting,这里的目标是通过点生成一条平滑的路径。路径不一定要经过所有点,但必须接近点上的线性插值 我尝试过使用三次插值,但在某些情况下,像这里的“坏情况”,插值路径偏离原始点很多。这里的图片显示了一个好案例和一个坏案例。目标是为路径生成点,该路径看起来总是好的。 在这些情况下,使用Scipys interpolatescipy.interpolate.interp1d(y,x,kind='cubic',假设_sorted=True)为路径插值2100个点。 点被排序为具有递增的y值。插值在y轴上完成。为这

这里的目标是通过点生成一条平滑的路径。路径不一定要经过所有点,但必须接近点上的线性插值

我尝试过使用三次插值,但在某些情况下,像这里的“坏情况”,插值路径偏离原始点很多。这里的图片显示了一个好案例和一个坏案例。目标是为路径生成点,该路径看起来总是好的。 在这些情况下,使用Scipys interpolate
scipy.interpolate.interp1d(y,x,kind='cubic',假设_sorted=True)为路径插值2100个点。
点被排序为具有递增的y值。插值在y轴上完成。为这两种情况插值的点如下:

Good case
23.204308,-150.612090
14.039986,-149.129036
5.546616,-144.278745
-1.650596,-137.243629
-6.973690,-126.542852
-8.825059,-114.238668
-9.050130,-100.383011
-8.133504,-67.950063
-7.382615,-48.586878
-5.116275,-29.257957
4.157739,-14.768362
13.102034,-7.162435
22.090450,-3.862909 
    Bad case
    23.670263,-147.947479
    14.505940,-146.464425
    6.012571,-141.614133
    -1.184641,-134.579017
    -6.507735,-123.878240
    -8.359104,-111.574057
    -8.584175,-97.718399
    -7.667549,-65.285451
    -6.916660,-45.922266
    -4.650320,-26.593345
    4.623694,-12.103750
    13.567988,-4.497823
    22.598071,-3.951675

对于这些情况,可以使用哪些其他曲线拟合或插值方法来生成点的平滑路径

Akima和pchip都按照@ev er的建议解决了这个问题。Akima和pchip的结果如所附图像所示


看起来像是scipy的pchip或Akima1DInterpolator的例子。interpolate

如果您将每个数据集分割为两个部分,并使用一个共享点进行重叠,则可以使用“二次”进行插值。