Python 如何使用具有不同原点和/或形状的多个mgrid计算值

Python 如何使用具有不同原点和/或形状的多个mgrid计算值,python,numpy-ndarray,Python,Numpy Ndarray,我想看看是否可以使用numpy-ndarray在python中使用GIS光栅算法。我正在计算多个定义区域(x,y)的概率值(z),并希望随后将概率相加。栅格重叠,但在x、y轴上的尺寸不相同。结果应显示网格重叠处添加的概率,并在不重叠处保留相应网格的概率值 我已经计算出了网格,但无法将它们相加。这可以在numpy中完成,还是我需要使用rasterio/GDAL工具?mgrids是最好的方法吗 我创建了一些简单的mgrid来说明这个问题 ys, xs = np.mgrid[5:15:5j, 0:5:

我想看看是否可以使用numpy-ndarray在python中使用GIS光栅算法。我正在计算多个定义区域(x,y)的概率值(z),并希望随后将概率相加。栅格重叠,但在x、y轴上的尺寸不相同。结果应显示网格重叠处添加的概率,并在不重叠处保留相应网格的概率值

我已经计算出了网格,但无法将它们相加。这可以在numpy中完成,还是我需要使用rasterio/GDAL工具?mgrids是最好的方法吗

我创建了一些简单的mgrid来说明这个问题

ys, xs = np.mgrid[5:15:5j, 0:5:5j]
f = lambda x, y: x * y + 1
vf = np.vectorize(f)
r = vf(xs, ys)
c1 = np.array([xs, ys, r])

ys2, xs2 = np.mgrid[4:9:6j, 1:6:6j]
f2 = lambda x, y: x + y * 2
vf2 = np.vectorize(f2)
r2 = vf2(xs2, ys2)
c2 = np.array([xs2, ys2, r2])
要绘制它们:

plt.contourf(c1[0], c1[1], c1[2], levels = 100)
plt.colorbar()
plt.show()


您的两个网格没有严格的超集-子集关系。下面是它们的样子:

如您所见,当两个栅格的域重叠时,实际栅格点是不相交的,只有一个栅格点

您将如何累积这些数据点?您拥有的阵列为每个网格点存储概率
z_i=z(x_i,y_i)
。该函数是离散的,仅在网格上定义。不能添加两个数据集,除非它们的网格点彼此对应。这样做没有任何意义


您可以做的是对其中一个栅格的数据进行插值,然后将其添加到另一个栅格(或第三个公共栅格)。这并不精确,只有在数据足够平滑的情况下才能起作用。此外,栅格只有部分重叠,因此您必须找出如何处理有多个点的区域和没有多个点的区域
contourf
也将接受2d格子的数据(即,好像是从
mgrid
生成的)。因此,您最初的问题的答案是“您不能直接这样做”。

旁注:如果您只使用元素算术运算,则不需要
矢量化。
plt.contourf(c2[0], c2[1], c2[2], levels = 100)
plt.colorbar()
plt.show()