сортировать список чисел с плавающей точкой в ​​группах - PullRequest
7 голосов
/ 22 ноября 2011

У меня есть массив чисел с плавающей точкой, который неупорядочен. Я знаю, что значения всегда падают вокруг нескольких точек, которые не известны. Для иллюстрации этот список

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

имеет значения, сгруппированные около 5 и 10, поэтому я бы хотел [5,10] в качестве ответа.

Я хотел бы найти эти кластеры для списков со значениями 1000+, где количество кластеров, вероятно, составляет около 10 (для некоторого заданного допуска). Как это сделать эффективно?

Ответы [ 2 ]

14 голосов
/ 22 ноября 2011

Проверка Python-кластер

С этой библиотекой вы можете сделать что-то вроде этого:

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]

(Это очень глупый пример, потому что я действительно не знаю, что вы хотите сделать, и потому что я впервые использую эту библиотеку)

5 голосов
/ 23 ноября 2011

Вы можете попробовать следующий метод:

Сначала отсортируйте массив и используйте 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...