我有一个数据集data[xi,yi,zi]
我想绘制(带插值)。使用scipy.interpolate,一切看起来几乎都很完美,但插值会产生一些超出输入数据范围的值。例如,假设zi
被0 < zi < 1
绑定,则rbf插值似乎是在边界之外返回插值(例如>1
);这是我的简化尝试:
N=100
data=[xi yi zi]
xis = np.linspace(xi.min(), xi.max(), N)
yis = np.linspace(yi.min(), yi.max(), N)
XI, YI = np.meshgrid(xis,yis)
rbf = scipy.interpolate.Rbf(xi, yi, zi, function='linear')
ZI=rbf(XI,YI)
print ZI.max()
->1.01357328514
有没有办法将限制传递给Rbf并让它知道不要超过zi.max()和zi.min()?
答案 0 :(得分:1)
使用径向基函数进行插值可能会导致值高于给定数据值的最大值和最小值。 (Illustration)。这是该方法的数学特征,无法传递禁用它的选项。两种可能的解决方案:
np.clip
剪切数据最小 - 最大值之间的插值。 scipy.interpolate.LinearNDInterpolator
),保证尊重数据值的最小值和最大值。