如何在具有N个元素的列表中找到质心?

问题描述

我正在尝试在列表中找到 n 个点的质心。我在下面编写了代码,该代码 n = 3的列表中计算质心,而在 n 可以是任何数字的列表中计算。

我该如何编辑以下代码,以便在例如list1包含4或5个元素,而不是像现在一样包含3个元素,而不必定义coords4coords5

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]


        

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...