我要将数据聚类成两个聚类,然后计算两个聚类的平均向量,但我不能这样做,原因是均值不适用于没有规则形状的数组,任何想法我该如何管理我的数据?
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。])]]它没有规则的形状,所以平均值不起作用
答案 0 :(得分:0)
你必须在计算平均值之前解压缩d:
...
d = [item for sublist in d for item in sublist]
c = np.mean(np.array(d), axis=0)
...