我有三个数组x,y,z
。我想平滑z数据。所以,我使用了SmoothBivariateSpline
函数。但是当我评估结果时,与之前的z数据相比,我获得了完全不同的值。以下是我的代码:
def envinterpolate(x,y,z):
x_interp = np.linspace(min(x),max(x),len(x)*4)
y_interp = np.linspace(min(y),max(y),len(x)*4)
sbsp = SmoothBivariateSpline(x,y,z)
z_interp = sbsp.ev(x_interp,y_interp)
return z_interp
在评估样条曲线的值时,我的代码有什么问题吗? 在尝试s = 0参数(红线实际z数据,黑线z-interp数据)后附加绘图
答案 0 :(得分:0)
按照惯例,"平滑" 特指那些不希望希望插值完全通过输入数据点的情况(例如,如果您知道输入数据有噪音)。
SmoothBivariateSpline
采用参数s
来控制应用于插值的平滑程度:
s : float,可选
为估算条件定义的正平滑因子:
sum((w[i]*(z[i]-s(x[i], y[i])))**2, axis=0) <= s Default s=len(w)
如果1/w[i]
是对z[i]
的标准偏差的估计值,那么它应该是一个好的值。
如果您不想要任何平滑,只需设置s=0
。