在Python中,最快的计算一组坐标元组的质心的方法,不使用numpy。

9 浏览
0 Comments

在Python中,最快的计算一组坐标元组的质心的方法,不使用numpy。

我一直在做一个非常时间敏感的项目(不幸的是必须使用Python),其中一个广泛使用的函数是计算一个(x,y)元组列表的质心的函数。举个例子:

def centroid(*points):
    x_coords = [p[0] for p in points]
    y_coords = [p[1] for p in points]
    _len = len(points)
    centroid_x = sum(x_coords)/_len
    centroid_y = sum(y_coords)/_len
    return [centroid_x, centroid_y]

其中

>>> centroid((0, 0), (10, 0), (10, 10), (0, 10))
[5, 5]

这个函数运行得相当快,上面的例子在我的系统上平均完成时间为1.49e-05秒,但我正在寻找计算质心的最快方法。你有什么想法吗?

我另一个解决方案是这样做的(其中l是元组列表):

map(len(l).__rtruediv__, map(sum, zip(*l)))

这个方法的运行时间在1.01e-05到9.6e-06秒之间,但不幸的是,将其转换为列表(通过将整个语句括在list( ... )中)几乎会使计算时间增加一倍。

编辑:欢迎使用纯Python提出建议,但不能使用numpy。

编辑2:刚刚发现,如果为元组列表的长度保留单独的变量,那么我上面使用map的实现可靠地在9.2e-06秒以下运行,但仍然存在转换回列表的问题。

编辑3:现在我只接受纯Python的答案,不接受numpy的答案(对于那些已经用numpy回答的人很抱歉!)

0