两个最简单的选项是使用matplotlib.nxutils.points_inside_poly 或使用mahotas.polygon.fill_polygon。后者快一点,但需要安装mahotas。
以第一个选项为例:
import numpy as np
from matplotlib.nxutils import points_inside_poly
nx, ny = 10, 10
poly_verts = [(1,1), (5,1), (5,9),(3,2),(1,1)]
# Create vertex coordinates for each grid cell...
# (<0,0> is at the top left of the grid in this system)
x, y = np.meshgrid(np.arange(nx), np.arange(ny))
x, y = x.flatten(), y.flatten()
points = np.vstack((x,y)).T
grid = points_inside_poly(points, poly_verts)
grid = grid.reshape((ny,nx))
print grid
产生(布尔型 numpy 数组):
[[False False False False False False False False False False]
[False True True True True False False False False False]
[False False False True True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]]
附带说明,nxutils 将在某个时候贬值,以支持某些路径方法。将来,您可能想做一些类似的事情:
from matplotlib import path
...
p = path.Path(poly_verts)
grid = p.contains_points(points)
...
但是,目前这只是在 github 头中。