官方文档 : scipy.interpolate.interp1d

scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)

其中,x 是一维数据;y 是 N 维数据且 y 在插值的方向轴上长度必须和 x 相等;kind 指定了插值类型(linear,nearest,zero,slinear,quadratic,cubic,previous,next),其中 zero,slinear,quadratic 和 cubic 指定了零、一、二、三阶样条插值;previous 和 next 仅仅返回当前点的前一个/后一个值。默认为 linear 线性插值。

from scipy.interpolate import interp1d
x = np.linspace(0, 10, num=11, endpoint=True)
y = np.cos(-x**2/9.0)
f = interp1d(x, y)
f2 = interp1d(x, y, kind='cubic')
xnew = np.linspace(0, 10, num=41, endpoint=True)
import matplotlib.pyplot as plt
plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--')
plt.legend(['data', 'linear', 'cubic'], loc='best')
plt.show()

kind='linear(默认)':使用一次函数插值 # Cubic-spline x = np.arange(0, 2*np.pi+np.pi/4, 2*np.pi/8) y = np.sin(x) tck = interpolate.splrep(x, y, s=0) xnew = np.arange(0, 2*np.pi, np.pi/50) ynew = interpolate.splev(xnew, tck, der=0) plt.figure() plt.plot(x, y, 'x', xnew, ynew, xnew, np.sin(xnew), x, y, 'b') plt.legend(['Linear', 'Cubic Spline', 'True']) plt.axis([-0.05, 6.33, -1.05, 1.05]) plt.title('Cubic-spline interpolation') plt.show()

x 和 y 是给定的一些坐标点,通过 splrep 函数计算出 B-spline 曲线的参数,再将该参数传递给 splev 函数计算出各个取样点 xnew 的插值结果。
在这里插入图片描述

(xnew,sin(xnew)):实际 xnew 应该对应的 y 值,相当于 ground-truth(表示为图中绿色曲线)

1. interpolate.splrep

官方文档 :scipy.interpolate.splrep

作用: 求取一维曲线的 B-spline 插值

给定一组数据点 k 次的光滑样条逼近。

scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)

其中,xy 是点的横纵坐标,xbxe 是间隔,k 为样条拟合度,建议使用三次样条(cubic splines),通常

# splrep 应用
import matplotlib.pyplot as plt
from scipy.interpolate import splev, splrep
x = np.linspace(0, 10, 10)
y = np.sin(x)
spl = splrep(x, y)
x2 = np.linspace(0, 10, 200)
y2 = splev(x2, spl)
plt.plot(x, y, 'o', x2, y2)
plt.show()

2. interpolate.splprep

官方文档 :scipy.interpolate.splprep

scipy.interpolate.splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None, full_output=0, nest=None, per=0, quiet=1)

作用: 求取 N 维曲线的 B-spline 插值

phi = np.linspace(0, 2.*np.pi, 40) r = 0.5 + np.cos(phi) # polar coords x, y = r * np.cos(phi), r * np.sin(phi) # convert to cartesian from scipy.interpolate import splprep, splev tck, u = splprep([x, y], s=0) new_points = splev(u, tck) import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(x, y, 'ro') ax.plot(new_points[0], new_points[1], 'r-') plt.show()

x:列表类型 [x,y],x 和 y 分别是表示曲线上坐标点的横纵坐标
w:数组类型,长度与 x[0] 相同,默认为 ones(len(x[0]))
k:spline 等级,推荐使用 Cubic splines(k=3),默认为 3
s:float 类型,平滑条件,较大的 s 意味着曲线比较光滑,建议 s 的取值在 官方文档:/tutorial/interpolate插值,即依据一系列点 (x,y)(x,y)(x,y) 通过一定的算法找到一个合适的函数来逼近这些点,反映出这些点的走势规律。当拟合出插值函数后便可用这个插值函数计算其他 xxx 对应的的 yyy 值,这就是插值的意义所在。interpolate.interp1d官方文档 :scipy.interpolate.interp1d语法:sci...

1.插值scipy.interpolate SciPyinterpolate模块提供了许多对数据进行插值运算的函数,范围涵盖简单的一维插值到复杂多维插值求解。 一维插值:当样本数据变化归因于一个独立的变量时; 多维插值:反之样本数据归因于多个独立变量时。 注:一维插值这里就不再讲述了,主要是对二维插值的一个总结。 2.interp2d() from scipy.interpolate import interp2d interp2d(x,y,z,kind='linear') 这里有几个注意事项:
#p100下半部分 #4.1.2scipy #例子2 interpolate.splev 函数  利用B样条和它的导数进行插值,interpolate.splev课展现二维曲线插值 import numpy as np import matplotlib.pyplot as plt import scipy as sp from scipy.interpolate import spl
scipy.interpolate.interp2d注意事项python插值方法scipy.interpolate.interp2d注意事项问题scipy.interpolate.interp2d的使用变化说明 python插值方法scipy.interpolate.interp2d注意事项 在使用scipy.interpolate.interp2d对数据插值时,发现输出的数据图像并不相同,然后找了一下原因。 坐标用的是经纬度数据,粗细的纬度数据都是从60~-60这样排列的,原因应该就是插值完的输出坐
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第18章 附件C---波形拟合 emWin5.44中新增的样条函数Spline可以实现波形拟合,即波形插补。不过当前可用于芯片的emWin库还没有升级到5.44,等升级到5.44后,大家可以做研究。 下面知识点来自百度百科...
class scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False) import numpy as np import matplotlib.pyplot as plt from scipy imp...
from scipy import interpolate import matplotlib as mpl mpl.rcParams["font.sans-serif"] = ["SimHei"] mpl.rcParams["axes.unicode_min...
【Bug解决】RuntimeError:Given groups=1,weight of size...expected input...but got 3 channels instead. 62862