【问题标题】:TypeError: unsupported operand type(s) for /: 'list' and 'long'TypeError: 不支持的操作数类型 /: 'list' 和 'long'
【发布时间】: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

【问题讨论】:

  • 正如错误所说,retrcount 是一个列表。
  • numpy.mean 需要一个数组。你给了它一个清单。
  • 好的,但是为什么当我在 X 中将 [3,7] 更改为 [3,1] 时,我没有收到任何错误,它会计算平均值
  • 我认为问题在于列表[3,7] 导致一个空的d 列表。你能检查一下吗?

标签: python numpy


【解决方案1】:

np.mean 确实适用于表示为列表的数组,例如:

np.mean([[1],[4],[6]])

但是它不适用于没有规则形状的数组,例如:

np.mean([[1, 2],[4],[6]])

这就是你遇到的问题,因为函数 d 内部的变量 a 看起来像:

[[array([ 5. ,  7. ]), array([ 3.,  7.])],
 [array([ 3.5,  5. ])                   ],
 [array([ 3.5,  4.5])                   ],
 [array([ 5. ,  8. ])                   ]]

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

【讨论】:

  • 问题与变量d有关
  • 在计算均值向量之前,r & d 是这样的: r: [[array([ 2., 3.])], [array([ 1.5, 2. ])], [数组([ 3., 4.])], [数组([ 1., 1.])], [数组([ 5., 1.])]] d: [[数组([ 5., 7. ]), 数组([ 3., 7.])], [数组([ 3.5, 5. ])], [数组([ 3.5, 4.5])], [数组([ 5., 8.])] ] ----- 程序正在计算 np.mean (r,axi=0) 而没有错误。所以,这个问题与d有关
  • @user3616059:是的,这就是我要说的:数组d 不是矩形的,这会导致错误。
猜你喜欢
  • 2014-12-28
  • 2012-12-12
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多