N 维数据集的质心

Centroid of N-Dimension dataset

由于我是 python 的新手,而且在一般编程方面,我的老师给了我一些工作。其中一些是与手写数字的 MNIST 数据库一起工作。每个数字都是一个包含 728 个分量的向量。 当我想计算每个 class 的质心时,问题就来了。这是 728 个维度中每个数字的平均值。 如果我有两个维度,我知道我应该做类似

的事情
avgx=(x1+x2+x3)/3

等等... 但是我不知道如何用 728 维来做。我试过的是:

labels = np.array(load_digits().target)
numbers = np.array(load_digits().data)
centroid=[]

i=0
count=[]
value=[0]*10
while(i<1):
    j=0
    
    value[i]=0
    
    while j<len(labels):
        
        if(labels[j]==i):
             count[i]=count[i]+1
             value[i]=value[i]+numbers[j]
             
        j=j+1
    
    valud=value[i]
    centroid.append(x/count[i] for x in valud)
    
    i=i+1

但它 returns <generator object <genexpr> at 0x000002ADA1818F90> 而不是返回一个 728 维向量,这将是数字 0 的质心,然后是数字 1 等等...

编辑:感谢一个答案,我将代码修改为:

centroid=[]
labels = np.array(load_digits().target)
numbers = np.array(load_digits().data)
k=0
i=0
#First we need to calculate the centroid    
while(i<10):
    j=0
    x=[]
    while j<len(labels):
        if(labels[j]==i):
             x.append(numbers[j])  
        j=j+1 
    avg=np.array(x)
    centroid.append((avg.mean(axis=0)))
    i=i+1

而且效果很好,非常感谢

您正在使用 numpy 数组,因此您应该充分利用它提供的所有功能。

如果您有一个包含 728 个 元素的 10 个向量的数组

>>> import numpy as np
>>> a = np.random.random((10,728))
>>> a.shape
(10, 768)

沿着第一个轴mean

>>> centroid = a.mean(axis=0)
>>> centroid.shape
(728,)
>>>

您应该花一些时间阅读 Numpy 文档中的 Absolute Beginners Tutorial and the Tutorials