You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行聚类质心更新代码时持续出现KeyError:0,请求排查

KeyError:0 问题定位与修复

核心原因

clustered_points是字典类型,但你用列表索引的方式clustered_points[i]去访问元素。字典只能通过对应的键取值,当键0不存在时,就会抛出KeyError:0。

代码逻辑矛盾

你在注释里写clusters = [] #dictionary to hold clusters with new centroids,但实际clusters是列表,反而传入的clustered_points才是字典(通常K-means中会用簇ID作为键来存储对应簇的点集合)。

修复方案

方案1:适配字典类型的clustered_points

直接遍历字典的所有值(每个簇的点集合),不用依赖k_centroids生成索引:

def get_new_centroid(clustered_points, k_centroids):
    clusters = []
    for points in clustered_points.values():
        new_centroid = compute_new_centroid(points)
        clusters.append((new_centroid, points))
    return clusters

方案2:确保clustered_points是列表类型

检查调用get_new_centroid时传入的参数,确认clustered_points是包含k_centroids个元素的列表,每个元素对应一个簇的点集合。比如:

# 调用示例(确保clustered_points是列表)
clustered_points = [[(1,2), (3,4)], [(5,6), (7,8)]]
new_clusters = get_new_centroid(clustered_points, 2)

额外优化

原compute_new_centroid固定处理二维数据,改成动态适配任意维度,同时增加空簇判断:

def compute_new_centroid(elem):
    if not elem:
        raise ValueError("簇中没有点,无法计算质心")
    dim = len(elem[0])
    new_centroid = []
    for i in range(dim):
        total = sum(point[i] for point in elem)
        new_centroid.append(total / len(elem))
    return new_centroid

内容的提问来源于stack exchange,提问作者Reese Chloe Batumbakal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:32