大家下午好!
我一直在研究一个非常时间敏感的项目(不幸的是在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.
EDIT2:刚刚发现,如果为元组列表的长度保留了一个单独的变量,那么上面的map的实现可以在9.2e-06秒之前可靠地运行,但还是有一个转换回列表的问题.
EDIT3:
现在我只接受纯蟒蛇的答案,而不是以麻木的方式接受答复