排序组中的浮点数列表

时间:2011-11-22 12:35:57

标签: python numpy

我有一个浮点数的数组,这是无序的。我知道价值总是在几个点附近,这是不知道的。例如,这个清单

[10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]

的值聚集在5和10左右,所以我希望[5,10]作为答案。

我想为具有1000+值的列表找到这些簇,其中簇的nunber可能大约为10(对于某些给定的容差)。如何有效地做到这一点?

2 个答案:

答案 0 :(得分:14)

检查python-cluster

使用此库,您可以执行以下操作:

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]