我将数据聚类成两个簇,然后计算平均向量,但出现以下错误。然而,当我把[3,7]改为[3,1]时,问题就解决了!!!有人可以帮助我吗?先感谢您
Traceback (most recent call last):
File "ao.py", line 36, in <module>
(r,d,u)=update(clusters)
File "ao.py", line 30, in update
c=np.mean(d, axis=0)
File "E:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 2716, in
mean
out=out, keepdims=keepdims)
File "E:\Python27\lib\site-packages\numpy\core\_methods.py", line 69, in _mean
ret = ret / rcount
TypeError: unsupported operand type(s) for /: 'list' and 'long'
Run Code Online (Sandbox Code Playgroud)
import numpy as np
clusters = {}
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],[2,3]])
centroid = ([[2.6,2],[4,6.3]])
def a(X):
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]
return clusters
def update (clusters):
d=[]
r=[]
c=[]
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)
u=np.mean(r,axis=0)
return(u,c)
clusters=a(X)
(u,c)=update(clusters)
print "c:",c
print "u:",u
Run Code Online (Sandbox Code Playgroud)
小智 5
np.mean确实适用于以列表表示的数组,例如:
np.mean([[1],[4],[6]])
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于不具有规则形状的数组,例如:
np.mean([[1, 2],[4],[6]])
Run Code Online (Sandbox Code Playgroud)
这就是您遇到的问题,因为d函数内部的变量a如下所示:
[[array([ 5. , 7. ]), array([ 3., 7.])],
[array([ 3.5, 5. ]) ],
[array([ 3.5, 4.5]) ],
[array([ 5. , 8. ]) ]]
Run Code Online (Sandbox Code Playgroud)
我认为您需要找到一种更好的方法来组织数据。