gpt4 book ai didi

python - 使用 scipy.interpolate.griddata 进行二维插值的不同结果

转载 作者:行者123 更新时间:2023-11-30 22:47:41 25 4
gpt4 key购买 nike

我需要对一些 Nan 进行插值二维 numpy 数组中的值,例如参见下图:

enter image description here

在我当前的方法中,我使用 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()

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

enter image description here

或按 np.sum 评估大约-62.7

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

最佳答案

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

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

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

如果您现在计算中心的值,您可以从一个三角剖分中得到 (B+D)/2,从另一个三角剖分中得到 (A+C)/2。

关于python - 使用 scipy.interpolate.griddata 进行二维插值的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com