scipy.interpolate.CubicSpline дает неоднозначный результат - PullRequest
0 голосов
/ 24 мая 2018

Мне нужно найти интерполяцию между двумя наборами точек 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'))

Но если я пересекаю-check, я получаю,

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 голосов
/ 24 мая 2018

Ваша проблема заключается в использовании ключевого слова extrapolate = periodic.Это предполагает, как можно догадаться, что в наборе данных существует периодичность и он должен удовлетворять условию y[0] == y[-1].

Поскольку неясно, почему ваши данные за год должны быть периодическими, и вы нарушаете допущение, установите extrapolate = True, и вы не получите странных результатов на границах вашего набора данных.

...