样条插值

Nie*_*brg 3 python interpolation scipy cubic-spline

我很难在下面的集合上执行样条插值:

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]
Run Code Online (Sandbox Code Playgroud)

线性插值工作正常,但是当我用三次替换线性时,我有一个错误:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能执行这个三次插值?

Blc*_*ght 6

你的SOURCE数据太短了。三次样条至少需要四个点进行插值,但您只需要提供三个点。如果你再添加一个值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]])
Run Code Online (Sandbox Code Playgroud)