使用scipy.interpolate.griddata进行2d插值的不同结果

时间:2016-11-06 11:52:58

标签: python numpy scipy

我需要在2d numpy数组中执行一些chromium-browser --remote-debugging-port=9222 --user-data-dir=remote-profile值的插值,例如参见下图:

enter image description here

在我目前的方法中,我使用Nan 用于插值程序。但是我注意到了 在两个轴上镜像数组,即scipy.interpolate.griddata 插值给出不同的结果。 这是一个完整的例子:

d2 = d[::-1, ::-1]

这给出了两个插值之间的差异:

enter image description here

或由import numpy as np import matplotlib.pyplot as plt import scipy.interpolate as interp def replace_outliers(f): mask = np.isnan(f) lx, ly = f.shape x, y = np.mgrid[0:lx, 0:ly] z = interp.griddata(np.array([x[~mask].ravel(),y[~mask].ravel()]).T, f[~mask].ravel(), (x,y), method='linear', fill_value=0) return z def main(): d = np.load('test.npy') d2 = d[::-1, ::-1] dn = replace_outliers(d) dn2 = replace_outliers(d2) print np.sum(dn - dn2[::-1, ::-1]) plt.imshow(dn-dn2[::-1, ::-1], interpolation='nearest') plt.colorbar() plt.show() if __name__=='__main__': main() 评估约为-62.7

那么如何对数组进行简单的镜像呢? 在插值过程中给出不同的结果? 我使用的坐标可能有问题吗?

1 个答案:

答案 0 :(得分:2)

原因可能是线性插值是基于三角形的。 然而,这样的方格是Delaunay三角剖分的简并情况,并且三角测量不是唯一的。我可以想象结果取决于数据点的顺序。

对于缺失的数据点,我猜这两种情况对应于空白区域的不同三角剖分:

                           A                 A
*   *   *              *---*---*         *---*---*
                       | /   \ |         | / | \ | 
*       *        =>   D*-------*B   or  D*   |   *B
                       | \   / |         | \ | / |
*   *   *              *---*---*         *---*---*
                           C                 C

如果现在计算中心的值,则从一个三角测量得到(B + D)/ 2,从另一个得到(A + C)/ 2。