我有一个浮点数的数组,这是无序的。我知道价值总是在几个点附近,这是不知道的。例如,这个清单
[10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
的值聚集在5和10左右,所以我希望[5,10]作为答案。
我想为具有1000+值的列表找到这些簇,其中簇的nunber可能大约为10(对于某些给定的容差)。如何有效地做到这一点?
答案 0 :(得分:14)
使用此库,您可以执行以下操作:
from cluster import *
data = [10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
cl = HierarchicalClustering(data, lambda x,y: abs(x-y))
print [mean(cluster) for cluster in cl.getlevel(1.0)]
你会得到:
[5.0062, 10.003333333333332]
(这是一个非常愚蠢的例子,因为我真的不知道你想做什么,因为这是我第一次使用这个库)
答案 1 :(得分:5)
您可以尝试以下方法:
首先对数组进行排序,然后使用diff()计算两个连续值之间的差异。大于阈值的差异可以视为分割位置:
import numpy as np
x = [10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
x = np.sort(x)
th = 0.5
print [group.mean() for group in np.split(x, np.where(np.diff(x) > th)[0]+1)]
结果是:
[5.0061999999999998, 10.003333333333332]