基于numpy的二维闭合多边形面积向量化计算方法咨询
实现方案
核心思路
基于鞋带公式的完全向量化实现,全程无Python层面的逐点遍历,所有运算由numpy底层完成,效率远高于手动循环。
假设输入的多边形顶点数组为poly,是shape为(n, 2)的numpy二维数组,每一行对应一个顶点的(x, y)坐标,支持顶点列表首尾不闭合的场景,numpy的循环偏移操作会自动处理最后一个顶点和第一个顶点的配对逻辑。
代码实现
import numpy as np def polygon_area(poly): # 拆分x、y坐标数组 x = poly[:, 0] y = poly[:, 1] # 循环偏移得到下一个顶点的坐标数组,为完全向量化操作 x_next = np.roll(x, -1) y_next = np.roll(y, -1) # 向量化计算每一步乘积项,直接得到目标一维数组 cross_terms = x * y_next - y * x_next # 计算最终面积 area = 0.5 * np.abs(np.sum(cross_terms)) return area, cross_terms
结果说明
- 第一个返回值
area就是多边形的面积,计算精度符合标准公式要求。 - 第二个返回值
cross_terms就是你需要的每一步乘积结果的一维numpy数组,全程通过向量运算生成,没有逐值赋值操作。
示例测试
以顶点为[[0,0], [0,1], [1,1], [1,0]]的单位正方形为例:
- 计算得到的
cross_terms为[0, -1, -1, 0] - 求和取绝对值后除以2,得到面积为
1.0,结果正确。
内容的提问来源于stack exchange,提问作者Yossi Khasidashvili
相关产品推荐
相关产品推荐

