用python从头开始编写kmean,没有任何外部包,比如numpy和scipy,当我尝试将数据点分配给集群时遇到了这个问题
从本质上讲,对于每个数据点,我找到哪个簇最接近该点,然后通过将数据点添加到属于该簇的点列表(即字典的值)来更新簇字典。我的问题是,当我尝试更新字典中的一个键时,它会将所有其他字典值都转换为“无”,这是不正确的
尝试分离流程的步骤并逐行查看,但当我尝试更新一个值时,所有其他值都变成无
clusters = dict.fromkeys(k_init, [].copy())
for elem in data:
minC = (101010101, 9999999)
for cent in k_init:
#print(elem, cent)
if eucliean(elem, cent) < minC[1]:
minC = (cent, eucliean(elem, cent))
key = minC[0]
old = clusters.get(key)
clusters[key] = old.append(elem)
问题就在眼前
当您创建如上所述的字典时,将为每个键分配同一列表的引用。因此,无论何时添加到任何键的列表中,它对所有其他键都是相同的引用,因此可以看到它被附加到所有键中。要避免此问题,请执行以下操作:
相关问题 更多 >
编程相关推荐