You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中求多个多边形点数组平均值的最优方法?

求多个多边形对应顶点平均值的最优方法

嘿,我来帮你优化这个求多边形对应顶点平均值的问题~你现在的代码虽然能实现功能,但扩展性太差了——要是以后多边形的顶点数变了,或者新增更多多边形,就得手动创建一堆x5、y5这类列表,代码会变得冗长又难维护。下面给你几个更优的实现方案:

纯Python简洁实现(推荐小规模场景)

利用Python内置的zip(*polys)可以自动把所有多边形的对应位置顶点打包在一起,比如第一个包就是所有多边形的第一个顶点,第二个包是所有多边形的第二个顶点,以此类推。然后对每个顶点包计算x、y坐标的平均值即可:

poly1 = [(2, 2), (10, 0), (10, 10), (2, 10)]
poly2 = [(4, 4), (20, 0), (20, 20), (4, 20)]
polys = [poly1, poly2]

averaged_vertices = []
# 打包所有多边形的对应顶点
for vertices_group in zip(*polys):
    # 计算当前顶点组的x坐标平均值
    avg_x = sum(v[0] for v in vertices_group) / len(vertices_group)
    # 计算当前顶点组的y坐标平均值
    avg_y = sum(v[1] for v in vertices_group) / len(vertices_group)
    averaged_vertices.append((avg_x, avg_y))

print(averaged_vertices)
# 输出结果: [(3.0, 3.0), (15.0, 0.0), (15.0, 15.0), (3.0, 15.0)]

如果想更精简,还可以用列表推导式一行搞定:

averaged_vertices = [
    (sum(v[0] for v in group)/len(group), sum(v[1] for v in group)/len(group))
    for group in zip(*polys)
]

这个方案的优势:

  • 完全不需要手动维护x1、y1这类列表,逻辑清晰
  • 扩展性拉满:不管你有10个还是100个多边形,只要所有多边形的顶点数一致,代码都不用改

大规模数据高效实现(用numpy)

如果你的多边形数量特别多,或者顶点数很大,纯Python循环的效率会有点低,这时候用numpy的向量化运算会快很多:

import numpy as np

poly1 = [(2, 2), (10, 0), (10, 10), (2, 10)]
poly2 = [(4, 4), (20, 0), (20, 20), (4, 20)]
polys = [poly1, poly2]

# 把多边形列表转成numpy数组
polys_array = np.array(polys)
# 沿着多边形的维度(axis=0)求平均值
averaged_vertices = np.mean(polys_array, axis=0).tolist()

print(averaged_vertices)
# 输出结果: [[3.0, 3.0], [15.0, 0.0], [15.0, 15.0], [3.0, 15.0]]

numpy会自动帮你完成所有对应位置的数值计算,代码更简洁,运算速度也比纯Python快几个量级。


内容的提问来源于stack exchange,提问作者user4352250

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:36