我有一个要绘制的数据集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()?
最佳答案
使用径向基函数进行插值可能会导致值超出给定数据值的最大值和最小值。 (Illustration)。这是该方法的一项数学功能,无法传递选项以将其禁用。两种可能的解决方案:
在绘制数据时,请使用np.clip
在数据的最小值-最大值之间裁剪插值。
请改用分段线性插值(scipy.interpolate.LinearNDInterpolator
),以确保遵守数据值的最小值和最大值。
关于python - scipy插值提供无限值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46267759/