[英]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.