我有一大组数据点(100,000+)存储在二维 numpy 数组中(第一列:x 坐标,第二列:y 坐标)。我还有几个一维数组存储每个数据点的附加信息。我现在想从这些 1D 数组的子集创建图,其中仅包含给定多边形中的点。
我想出了以下既不优雅也不快速的解决方案:
#XY is the 2D array.
#A is one of the 1D arrays.
#poly is a matplotlib.patches.Polygon
mask = np.array([bool(poly.get_path().contains_point(i)) for i in XY])
matplotlib.pylab.hist(A[mask], 100)
matplotlib.pylab.show()
您能帮我改进这段代码吗?我尝试使用 np.vectorize 而不是列表理解,但无法使其正常工作。
最佳答案
使用 matplotlib.nxutils.points_inside_poly ,它实现了一个非常有效的测试。
matplotlib FAQ 上对这个 40 年历史的算法的示例和进一步说明.
更新:请注意,points_inside_poly
自 matplotlib 1.2.0 版起已弃用。使用matplotlib.path.Path.contains_points而是。
关于python - 如何确定哪些点在多边形内,哪些不在(大量点)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833950/