scipy.interpolate.CubicSpline给出了模棱两可的结果

时间:2018-05-24 16:47:14

标签: python scipy interpolation

我必须找到两组点X,Y之间的插线,以便:

X = [2011, 2012, 2013, 2014, 2015, 2016, 2017]  
Y = [0.947079910779078, 0.958840491330058, 0.948653507807658, .94687561871641, 0.94732364567882, 0.953963141055096, 0.943468711524127]

我尝试通过CubicSpline

找到插值
F_spline = scipy.interpolate.CubicSpline(X, Y, extrapolate='periodic'))

但如果我反复核对,我明白了,

In [98]: F_spline_val = [F_spline(year) for year in X]
Out[98]: [array(0.94707991),
          array(0.95884049),
          array(0.94865351),
          array(0.94687562),
          array(0.94732365),
          array(0.95396314),
          array(0.94707991)]

请注意,此处为2017计算的最后一个值为0.94707991,而在原始变量中,2017的值为0.943468711524127。这显然是不准确的。我在这里错过了什么?为什么2017的值不明确?

1 个答案:

答案 0 :(得分:1)

您的问题是使用关键字A*(1,0)' = (1,i)'。正如人们可能猜测的那样,假设数据集中存在周期性it has to fulfill the condition that y[0] == y[-1]

由于不清楚,为什么您的年度相关数据应该是定期的并且您违反了该假设,请设置((1,i)',(1,0)')并且您不会在数据集的边缘获得奇怪的结果。