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

时间:2018-10-28 18:10:02

标签: python numpy-ndarray

我试图查看是否可以使用numpy ndarrays在python中使用GIS栅格算法。我正在计算多个定义区域(x,y)的概率值(z),并希望随后加总概率。网格重叠,但x,y的尺寸不同。结果应显示在网格重叠的位置添加的概率,并在不重叠的位置保留各个网格的概率值。

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

我创建了一些简单的mgrids来说明问题。

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()

c1 plot

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

c2 plot

1 个答案:

答案 0 :(得分:1)

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

two grids plotted in 2d

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

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

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