【发布时间】:2014-06-02 22:12:14
【问题描述】:
我将数据聚类为两个聚类,然后我将计算平均向量,但出现以下错误。但是,当我将[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'
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
【问题讨论】:
-
正如错误所说,
ret或rcount是一个列表。 -
numpy.mean需要一个数组。你给了它一个清单。 -
好的,但是为什么当我在 X 中将 [3,7] 更改为 [3,1] 时,我没有收到任何错误,它会计算平均值
-
我认为问题在于列表
[3,7]导致一个空的d列表。你能检查一下吗?