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。
由于我是 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。