Matplotlib 有一个非常快的 point_in_poly 函数。这直接取自 matplotlib 文档:nxutils
在 [25] 中:将 numpy 导入为 np
在 [26] 中:将 matplotlib.nxutils 导入为 nx
在 [27] 中:verts = np.array([ [0,0], [0, 1], [1, 1], [1,0]], float)
在 [28] 中:nx.pnpoly(0.5, 0.5, verts)
出[28]:1
在 [29] 中:nx.pnpoly(0.5, 1.5, verts)
输出[29]:0
在 [30] 中:点 = np.random.rand(10,2)*2
在[31]中:点
输出[31]:
数组([[ 1.03597426, 0.61029911],
[1.94061056, 0.65233947],
[1.08593748, 1.16010789],
[0.9255139,1.79098751],
[1.54564936, 1.15604046],
[1.71514397, 1.26147554],
[1.19133536, 0.56787764],
[0.40939549,0.35190339],
[1.8944715,0.61785408],
[0.03128518, 0.48144145]])
在 [32] 中:nx.points_inside_poly(points, verts)
Out[32]: array([False, False, False, False, False, False, False, True, False, True], dtype=bool)
之后,只需测试集合中的每个点并确定两个、一个或都不在顶点内。