Сплайн-интерполяция - PullRequest
0 голосов
/ 03 мая 2020

У меня трудности с выполнением сплайн-интерполяции на приведенном ниже наборе:

import numpy
SOURCE = numpy.array([[1,2,3],[3,4,5], [9,10,11]])
from scipy.interpolate import griddata
from scipy.interpolate import interp1d
input = [0.5,2,3,6,9,15]

Линейная интерполяция работает нормально, но когда я заменяю линейную на cubi c, у меня возникает ошибка:

f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="linear", axis=0, bounds_error=False)
f(input)

f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="cubic", axis=0, bounds_error=False)
ValueError: The number of derivatives at boundaries does not match: expected 1, got 0+0

Как я могу выполнить эту кубическую c интерполяцию?

1 Ответ

2 голосов
/ 03 мая 2020

Ваши SOURCE данные слишком короткие. Для сплайна кубического c требуется как минимум четыре точки, из которых вы можете получить только три. Если вы добавите еще одно значение к SOURCE, оно должно работать более или менее ожидаемым образом:

>>> SOURCE = numpy.array([[1,2,3],[3,4,5], [9,10,11], [12,13,14]])  # added an extra value
>>> f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="cubic", axis=0, bounds_error=False)
>>> f(input)
array([[nan, nan],
       [ 3.,  4.],
       [ 4.,  5.],
       [ 7.,  8.],
       [10., 11.],
       [nan, nan]])
...