K表示聚类和均值向量

时间:2014-06-03 05:46:51

标签: python arrays k-means mean

我要将数据聚类成两个聚类,然后计算两个聚类的平均向量,但我不能这样做,原因是均值不适用于没有规则形状的数组,任何想法我该如何管理我的数据?

import numpy as np
X = np.array([[1,1],[1.5,2],[3,4],[5,7],[3.5,5],[3,7],[3.5,4.5],[5,8],[5,1]])
centroid = np.array([[2.5,2.2],[4,6.3]])
clusters={}
for x in X:

  z= min([(i[0], np.linalg.norm(x-centroid[i[0]]))  for i in enumerate(centroid)], key=lambda t:t[1])

  try:
      clusters[z].append(x)
  except KeyError:
      clusters[z]=[x]

newmu = []
r=[]
d=[]
keys = sorted(clusters.keys())
for k in keys:
  if k[0]==0:
   r.append(clusters[(k[0],k[1])])

  else:
   d.append(clusters[(k[0],k[1])])

c=np.mean(d ,axis = 0)
f=np.mean(r,axis=0)
print c
print f

变量r是:[[array([2.,3。])],[array([1.5,2。])],[array([3.,4。])],[array( [1。 ,1。]),[array([5.,1。])]]并没有问题,因为它确实有规则的形状

问题在于变量d:[[array([5.,7。]),array([3.,7。])],[array([3.5,5。])],[array( [3.5,4.5])],[array([5.,8。])]]它没有规则的形状,所以平均值不起作用

1 个答案:

答案 0 :(得分:0)

你必须在计算平均值之前解压缩d:

... 
d = [item for sublist in d for item in sublist]
c = np.mean(np.array(d), axis=0)
...