我需要在2d numpy数组中执行一些chromium-browser --remote-debugging-port=9222 --user-data-dir=remote-profile
值的插值,例如参见下图:
在我目前的方法中,我使用Nan
用于插值程序。但是我注意到了
在两个轴上镜像数组,即scipy.interpolate.griddata
插值给出不同的结果。
这是一个完整的例子:
d2 = d[::-1, ::-1]
这给出了两个插值之间的差异:
或由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
那么如何对数组进行简单的镜像呢? 在插值过程中给出不同的结果? 我使用的坐标可能有问题吗?
答案 0 :(得分:2)
原因可能是线性插值是基于三角形的。 然而,这样的方格是Delaunay三角剖分的简并情况,并且三角测量不是唯一的。我可以想象结果取决于数据点的顺序。
对于缺失的数据点,我猜这两种情况对应于空白区域的不同三角剖分:
A A
* * * *---*---* *---*---*
| / \ | | / | \ |
* * => D*-------*B or D* | *B
| \ / | | \ | / |
* * * *---*---* *---*---*
C C
如果现在计算中心的值,则从一个三角测量得到(B + D)/ 2,从另一个得到(A + C)/ 2。