尝试更新值为lis的词典中的值时出错

2024-09-27 21:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

用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)

Tags: 数据keyinnumpyfor字典initscipy
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:51

问题就在眼前

clusters = dict.fromkeys(k_init, [].copy())

当您创建如上所述的字典时,将为每个键分配同一列表的引用。因此,无论何时添加到任何键的列表中,它对所有其他键都是相同的引用,因此可以看到它被附加到所有键中。要避免此问题,请执行以下操作:

clusters = { key : list([]) for key in keys }

相关问题 更多 >

    热门问题