python 在有“孔”的阵列上插值(屏蔽阵列)

6tdlim6h  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(104)

我有一组非网格点和一个有洞的网格-用一个有NaN的数组来表示(掩码数组?)。我试图将非网格点"Map"到这个网格上,然后在网格上进行插值,NaN区域作为边界。
griddata可以很好地插入这些数据,但是忽略了NaN值,NaN "墙"一边的值会影响另一边的值。(我希望这是有意义的)。
有人知道是否有任何方法可以强制网格数据以NaN作为边界,并且不允许NaN区域一侧的点影响另一侧吗?
到目前为止,我可以得到这个:

左图是在一个非屏蔽数组上执行的网格数据,右图是在一个屏蔽数组上执行的网格数据。我希望不要看到插值在屏蔽区域进行。
这是一个简化的示例,我的遮罩阵列实际上要复杂一些(网格/阵列中有一组空白岛或"孔"),因此无法真正孤立地处理截面(本示例中的解决方案)。
这是我目前掌握的情况:

X = np.asarray(cfdx[1:])
Y = np.asarray(cfdy[1:])
Z = np.asarray(errors)

xi = np.linspace(X.min(),X.max(),100)
yi = np.linspace(Y.min(),Y.max(),100)

xii = xi
yii = yi

zii = griddata((X, Y), Z, (xii[None,:], yii[:,None]), method='cubic')

fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.add_subplot(121)
CS = plt.contourf(xii,yii,zii,15)

xi[45:50] = np.NaN
yi[45:50] = np.NaN

zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')

ax2 = fig.add_subplot(122)
CS2 = plt.contourf(xi,yi,zi,15)

plt.show()

任何帮助将不胜感激!
假阳性

ars1skjm

ars1skjm1#

虽然这个问题已经很老了,但我还是想发表一下意见,并寻求一些提示。我也遇到了类似的问题,不同之处在于这四个区块可能不是完全断开的,而是通过洞周围的“弯路”连接起来的(背景是地下水位的插值)。
仔细想想,我们需要的是
1.一种有效计算网格内任意两个位置之间距离的算法,反映了避免间隙的最短连接。
1.允许明确设置距离而不是仅从数据点和目标位置计算距离的插值算法。
由于我不想同时编写这两种代码,如果有人能为我指出这两种可能存在的解决方案,我会非常高兴。我知道有商业软件可以进行这种插值,但我更喜欢独立的解决方案。

相关问题