类型错误:/ 不支持的操作数类型:“list”和“long”

Ami*_*ebi 1 python numpy

我将数据聚类成两个簇,然后计算平均向量,但出现以下错误。然而,当我把[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)

我认为您需要找到一种更好的方法来组织数据。