Каким будет оптимальный способ кластеризации узлов после резки 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