Кластеризация после минимального сокращения связующего дерева - PullRequest
1 голос
/ 05 июля 2010

Каким будет оптимальный способ кластеризации узлов после резки MST с максимальной длиной ребра?Мой вывод из MST cut-length представляет собой массив 2xN, где каждый элемент является целым числом.Целые числа - это идентификаторы узлов, которые описывают ребра.Пример вывода приведен ниже:

>>> print array[0:3]
[[  0   1]
 [  0   2]
 [  2  17]]

Я обычно имею дело со 100 до 20000 узлов.Мой MST-код достаточно быстр, но его затопляет алгоритм кластеризации / группировки.Это большой набор функций, и это замедляет его.Проверьте следующий код.Есть идеи, как это ускорить?Я знаю, что это метод грубой силы, поэтому лучше использовать более чистый метод.Заранее спасибо за помощь!

Приветствия,

Илай

def _super_intersection(edges):
    group = set(edges[0])
    index = np.array([0])
    k = 0
    while k < 100:
        k += 1
        i = 0
        for edge in edges[1:]:
             i += 1
             edge = set(edge)
             if group & edge:
                 group = group | edge
                 index = np.append(index, i)

index = np.unique(np.array(index))
return group, index


def cluster(self, gmin = 5):
    # A 2xN array of node IDs
    edges = self.edges
    group_nodes = {}
    for no, edge in enumerate(edges):
        try:
            group, indice = _super_intersection(edges)
            id_no = no                
            edges = np.delete(edges,indice,0)
            if len(group) >= gmin:
                group_nodes[id_no] = list(group)
        except:
            self.group_nodes = group_nodes

1 Ответ

0 голосов
/ 29 июля 2010

Проблема была решена.Перейдите по ссылке группы Google NetworkX, чтобы увидеть решение.

http://groups.google.com/group/networkx-discuss/browse_thread/thread/4ac4250d460a1b75

Приветствия,

Eli

...