需要提出几个问题:
您是否只关注线性插值(即"连接点"用直线段)?这简单但有点讨厌。您可以使用更高阶曲线(即双三次样条曲线)获得更好的结果,但为此您需要提供更多信息来确定唯一解决方案(即端点一阶导数)。
您是否希望同时平滑曲线,或者您是否希望它完全通过您的给定点?
您的输入点是否均匀间隔(即沿x轴)?
您的数据不仅显示插值,还显示外推(即您的最后一点不在数据末尾) - 这实际上是您想要的吗?
Matlab documentation说" interp将0插入原始信号,然后将低通内插滤波器应用于扩展序列"。
你可以像这样制作一个包装器:
import numpy as np
from scipy.interpolate import interp1d
def interp(ys, mul):
# linear extrapolation for last (mul - 1) points
ys = list(ys)
ys.append(2*ys[-1] - ys[-2])
# make interpolation function
xs = np.arange(len(ys))
fn = interp1d(xs, ys, kind="cubic")
# call it on desired data points
new_xs = np.arange(len(ys) - 1, step=1./mul)
return fn(new_xs)
然后像一样工作
>>> interp([1,2,3,4,5,6,7,8,9,10], 2)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ,
5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5,
10. , 10.5])