为两个1d数组列表评估SmoothBivariateSpline

时间:2015-10-28 13:53:00

标签: python numpy scipy interpolation

我有三个数组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数据)后附加绘图

enter image description here

1 个答案:

答案 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