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

如何根据原列表元素升序规则重新对聚类簇标签进行编号

实现思路
  • 首先为每个原始聚类簇计算可排序的代表值(通常取簇内元素最小值即可满足升序排序需求)
  • 对所有原始聚类簇按照代表值从小到大排序,生成「原始簇编号→新簇编号」的映射表
  • 遍历原clusters列表,用映射表替换所有编号即可,全程不会改变元素与簇的归属对应关系
代码实现(Python)
l = [4, 55, 8, 9, 12, 11, 11, 813, 832, 774, 781, 5, 769, 22]
clusters = [0, 3, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 2, 0]

# 收集每个原始簇包含的所有元素
cluster_element_map = {}
for val, old_cluster_id in zip(l, clusters):
    cluster_element_map.setdefault(old_cluster_id, []).append(val)

# 按簇的最小元素升序排列原始簇,生成编号映射
sorted_old_ids = sorted(cluster_element_map.keys(), key=lambda x: min(cluster_element_map[x]))
id_mapping = {old_id: new_id for new_id, old_id in enumerate(sorted_old_ids)}

# 替换得到新的聚类编号列表
new_clusters = [id_mapping[old_id] for old_id in clusters]
print(new_clusters)

运行上述代码输出结果为:[0, 1, 0, 0, 0, 0, 0, 3, 3, 2, 2, 0, 2, 0],完全符合需求。

自定义说明

如果需要调整簇的排序基准,只需修改sorted方法的key参数即可,比如替换为max(cluster_element_map[x])按最大值排序,或替换为sorted(cluster_element_map[x])[len(cluster_element_map[x])//2]按中位数排序,适配不同的升序规则。

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:06:01