如何解决如何在具有N个元素的列表中找到质心?
我正在尝试在列表中找到 n 个点的质心。我在下面编写了代码,该代码在 n = 3的列表中计算质心,而在 n 可以是任何数字的列表中计算。
我该如何编辑以下代码,以便在例如list1
包含4或5个元素,而不是像现在一样包含3个元素,而不必定义coords4
和coords5
?
list1 = [[1,4,0],[0,1],[1,8,[2,13,[12,11,0]]
def centroid(*args):
coords1 = [p[0] for p in list1]
coords2 = [p[1] for p in list1]
coords3 = [p[2] for p in list1]
_len = len(list1)
centroid1 = sum(coords1)/_len
centroid2 = sum(coords2)/_len
centroid3 = sum(coords3)/_len
return [centroid1,centroid2,centroid3]
centroid(list1)
出局:
[2.833,8.0,0.333]
解决方法
简单易读的循环,无需使用额外的功能
n = len(list1[0])
centroid = [0]*(n)
for i in range(n):
total = sum([item[i] for item in list1])
centroid[i] = total/len(list1)
print(centroid)
,
如果您想要高效的代码,最好使用numpy。这将适用于任何尺寸。没有循环。
import numpy as np
arr1 = np.array([[1,4,0],[0,1],[1,8,[2,13,[12,11,0]])
print(np.mean(arr1,axis=0))
输出:
[2.83333333 8. 0.33333333]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。