Cartopy 系列:利用多边形生成掩膜数组
二维平面上一系列点的坐标由 x
和 y
数组描述,同时准备一个形状相同的 mask
数组。若第 i
个点落入了平面上一个多边形的内部,则令 mask[i] = True
;若在多边形外,则令 mask[i] = False
。由此得到的 mask
数组即掩膜(mask)数组,它可以作为布尔索引分出多边形内外的点
x_in, y_in = x[mask], y[mask]
x_out, y_out = x[mask], y[mask]
它可以作为掩膜,掩盖多边形范围外的值——即把外面的值设为 NaN,以便进行后续的计算
z[~mask] = np.nan
z_mean = np.nanmean(z)
下图展示了两个应用:左小图的多边形是一个中心带洞的正方形,给定一系列散点的坐标,计算出掩膜后可以把多边形内的散点画成红色,多边形外的散点画成蓝色;右小图的多边形是中国全域,给定 (50, 50)
形状的经纬度网格,计算出掩膜后用橙色画出掩膜为 True
的部分,这张掩膜之后可以用来处理网格上的其它变量。
本文的目的是介绍如何用 Python 制作掩膜数组,并尽量优化其运行时间。从 shapefile 中读取中国国界并转化为 Shapely 中的多边形对象等操作,已经在博文 Cartopy 系列:探索 shapefile 中详细介绍过了,本文是对其的一个补充。