-1

由于我是 python 和一般编程的新手,我的老师给了我一些工作。其中一些是与 MNIST 手写数字数据库一起使用的。每个数字都是 728 个分量的向量。当我想计算每个类的质心时,问题就来了。这是 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

但它返回<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

而且效果很好,非常感谢

4

1 回答 1

0

您正在使用 numpy 数组,因此您应该利用它所提供的一切。

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

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

只需沿第一个轴取平均值。

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

您应该花一些时间阅读绝对初学者教程和Numpy 文档中的教程。

于 2021-01-26T20:05:33.703 回答