繁体   English   中英

如何修复 Python 中的“TypeError: 'int' object is not iterable”错误

[英]How to fix ‘TypeError: 'int' object is not iterable’ error in Python

当我运行我的代码时,我得到:

TypeError: 'int' object is not iterable'

在线:

centroids[key] = [m / len(assignments[key]) for m in clust_sum]

这是我的python代码:

def k_means_clust(data,num_clust,num_iter,w=5):
    centroids=random.sample(data,num_clust)
    counter=0
    for n in range(num_iter):
        counter+=1
        print counter
        assignments={}
        #assign data points to clusters
        for ind,i in enumerate(data):
            min_dist=float('inf')
            closest_clust=None
            for c_ind,j in enumerate(centroids):
                if LB_Keogh(i,j,5)<min_dist:
                    cur_dist=DTWDistance(i,j,w)
                    if cur_dist<min_dist:
                        min_dist=cur_dist
                        closest_clust=c_ind
            if closest_clust in assignments:
                assignments[closest_clust].append(ind)
            else:
                assignments[closest_clust]=[]

        #recalculate centroids of clusters
        for key in assignments:
            clust_sum=0
            for k in assignments[key]:
                clust_sum=clust_sum+data[k]
            centroids[key]=[m/len(assignments[key]) for m in clust_sum] #<-HERE ERROR 

    return centroids

我无法理解我收到此错误的原因。
变量clust_sum是一个numpy.ndarray
先感谢您。

您在循环之前重新定义了 clust_sum

clust_sum=0

所以 clust_sum 现在是一个 int,你不能迭代它

centroids[key]=[m/len(assignments[key]) for m in clust_sum]

您只需要将“clust_sum=0”排除在迭代之外:

    clust_sum=0
    #recalculate centroids of clusters
    for key in assignments:
        for k in assignments[key]:
            clust_sum=clust_sum+data[k]
        centroids[key]=[m/len(assignments[key]) for m in clust_sum]

return centroids

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM