排序组中的浮点数列表

eud*_*xos 7 python numpy

我有一个浮点数的数组,这是无序的.我知道价值总是在几个点附近,这是不知道的.为了说明,这个列表

[10.01,5.001,4.89,5.1,9.9,10.1,5.05,4.99]
Run Code Online (Sandbox Code Playgroud)

有价值聚集在5和10左右,所以我想[5,10]作为答案.

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

Fáb*_*niz 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)]
Run Code Online (Sandbox Code Playgroud)

你会得到:

[5.0062, 10.003333333333332]
Run Code Online (Sandbox Code Playgroud)

(这是一个非常愚蠢的例子,因为我真的不知道你想做什么,因为这是我第一次使用这个库)


HYR*_*YRY 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)]
Run Code Online (Sandbox Code Playgroud)

结果是:

[5.0061999999999998, 10.003333333333332]
Run Code Online (Sandbox Code Playgroud)