我正在尝试实现一些插值技术-特别是使用scipy pchip例程。
我要确定的是,是否可以通过分别插值每个坐标来执行规则空间2d数据的插值。
例如,如果我有:
(1 x m) vector of X coordinates
(1 x n) vector of Y coordinates
(m x n) matrix of Z coordinates //Z value corresponding to (x,y) pair
是否可以在每个维度上连续执行pchip插值,从而创建插值曲面?
Pchip期望数据以pchip(X,Z)的形式-X和Z均为一维数组。那么插值每个维度的最佳方法是什么?我应该为Z矩阵的每一列做pchip(X,Z)吗?然后在由第一次插值产生的矩阵的每一行上有pchip(Y,Z *)吗?
感谢您的帮助。我看过有关用pchip执行张量rpoduct插值的pv帖子,但是即使他在github上进行了更新,它也导致了我无法摆脱的令人讨厌的零除错误。
编辑:
我发现这张票贴出了关于我使用pchip的警告:
http://projects.scipy.org/scipy/ticket/1838
任何人都可以告诉我这是什么意思
“这样生成的infs / nans可以通过应用布尔条件掩码来过滤掉,但是该掩码可以在除法之前应用,从而完全避免了警告。”
我如何应用此方法来避免警告?
最佳答案
看一下顶部的图片
Bilinear interpolation。
找到y1,y2最接近y的行,pchip
x以获得R1 R2(蓝色),
然后线性插值得到P(绿色)。
(您也可以按照其他顺序进行操作,然后对值x-then-y,y-then-x求平均值。)
但是,如果pchip
在节点之间几乎是线性的(是否适合您的数据?),
那么直接进行双线性会更简单,
要么与
scipy BivariateSpline
或搭配
scipy.ndimage.interpolation.map_coordinates(... order = 1)
和(包装)包装
Intergrid。