分组排序浮点数列表

8 投票
2 回答
2154 浏览
提问于 2025-04-17 06:50

我有一个浮点数的数组,这个数组是无序的。我知道这些数值总是集中在几个点附近,但具体的点我并不知道。举个例子,这个列表

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

中的数值主要集中在5和10附近,所以我希望能得到[5,10]这样的结果。

我想要找到这些聚集点,列表的长度超过1000个值,而聚集的数量大概在10个左右(根据某个给定的容忍度)。我该如何高效地做到这一点呢?

2 个回答

8

你可以试试下面的方法:

首先把数组排序,然后用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]
16

可以看看这个叫做 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]

(这个例子很简单,因为我其实不知道你想做什么,而且这是我第一次使用这个库)

撰写回答