gpt4 book ai didi

python - 如何在不指定聚类数的情况下对列表中的项目进行聚类

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:40 24 4
gpt4 key购买 nike

我的目标是根据任意两个连续项目之间的距离对下面列表中的项目进行聚类。未指定簇数,仅指定最大距离在任何两个连续的项目之间,不得超过它们才能在同一集群中。

我的尝试

import itertools
max_dist=20
_list=[1,48,52,59,89,94,103,147,151,165]
Ideal_result= [[1],[48,52,59],[89,94,103],[147,151,165]]

def clust(list_x, max_dist):
q=[]
for a, b in itertools.combinations(list_x,2):
if b-a<=20:
q.append(a),(b)
else:continue
yield q
print list(clust(_list,max_dist))

输出:

[[48,48,52,89,89,94,147,147,151],[48,48,52,89,89,94,147,147,151],..]`

输出完全错误,但我只是想包括我的尝试。

关于如何获得理想结果有什么建议吗?谢谢。

最佳答案

这通过了你的测试:

def cluster(items, key_func):
items = sorted(items)
clusters = [[items[0]]]
for item in items[1:]:
cluster = clusters[-1]
last_item = cluster[-1]
if key_func(item, last_item):
cluster.append(item)
else:
clusters.append([item])
return clusters

如果当前项和先前项应属于同一集群,则 key_func 返回 True:

>>> cluster([1,48,52,59,89,94,103,147,151,165], lambda curr, prev: curr-prev < 20)
[[1], [48, 52, 59], [89, 94, 103], [147, 151, 165]]

另一种可能性是修改 "equivalent code" for itertools.groupby()同样为键函数采用多个参数。

关于python - 如何在不指定聚类数的情况下对列表中的项目进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com