python - 二维插值,逐维处理
我正在尝试实现一些插值技术,特别是使用scipy的pchip函数。
我想知道是否可以通过分别插值每个坐标来对规则间隔的二维数据进行插值。
举个例子,如果我有:
(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进行张量积插值,但我遇到了一个麻烦的除零错误,即使在他更新的github上也没法解决。
编辑:
我发现了一个关于我使用pchip时出现的警告的帖子: http://projects.scipy.org/scipy/ticket/1838
有人能告诉我,当它说 “生成的inf和nan会通过应用布尔条件掩码过滤掉,但可以在除法之前应用掩码,以完全避免警告。”这是什么意思吗?
我该如何应用这个来避免警告呢?
1 个回答
0
看看双线性插值页面上的顶部图片。
找到离y最近的两行y1和y2,
在这两行中用pchip
找到x,得到R1和R2(蓝色),
然后再进行线性插值,得到P(绿色)。
(你也可以先计算x再计算y,或者先计算y再计算x,最后取平均值。)
不过,如果pchip
在节点之间几乎是线性的(你的数据是这样吗?),
那么直接使用双线性插值会更简单,
可以用scipy的BivariateSpline
或者用scipy.ndimage.interpolation.map_coordinates(... order=1)
以及(咳咳)这个工具Intergrid。