我有一个浮点数的数组,它是无序的。我知道价值总是落在几个不知道的点上。为了说明,这个清单组中的浮点数的排序列表
[10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
有值聚集在5和10左右,所以我想[5,10]作为答案。
我想找到那些具有1000多个值的列表,其中聚类的nunber大概在10左右(对于某些给定的容差)。如何有效地做到这一点?
我有一个浮点数的数组,它是无序的。我知道价值总是落在几个不知道的点上。为了说明,这个清单组中的浮点数的排序列表
[10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
有值聚集在5和10左右,所以我想[5,10]作为答案。
我想找到那些具有1000多个值的列表,其中聚类的nunber大概在10左右(对于某些给定的容差)。如何有效地做到这一点?
有了这个库,你可以做这样的事情:
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]
(这是一个非常愚蠢的例子,因为我不真的不知道你想做什么,因为这是我第一次使用这个库)
您可以尝试以下方法:
首先对数组进行排序,然后使用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]
短使用例将是很好。该链接可能很快就会过时。 –
@Tim您说得对,我已经添加了一个简短的示例 –
该软件包的文档是我需要使用它的所有文档,它的工作原理非常棒。 – eudoxos