Получение членства узла в каждом кластере - PullRequest
1 голос
/ 05 мая 2020

Я использую марковскую кластеризацию для кластеризации графа из 878 узлов. Реализация основана на упомянутой здесь работе https://github.com/guyallard/markov_clustering

adj_matrix = nx.to_numpy_matrix(G)
res = mcl.run_mcl(adj_matrix)
clusters = mcl.get_clusters(res)

кластеры:

[(0,73, 88,173,223,235,390,405,409,435,442,456,481,501,573,615), 
(5, 38, 193, 403, 657, 679, 760, 791, 835, 854),
...
...
(7, 201, 640)]

Похоже, что процедура дает мне порядок узлов НЕ исходная метка, которую я использовал для построения графика, выглядела так: 780873982, 928735728, 293482978, и т. д. c. Есть ли способ сопоставить приведенный выше результат с исходными метками узлов?

Ожидаемый результат будет таким

[(780873982, 928735728, 293482978), (293482932, 883482978), ...] 

Заранее спасибо!

1 Ответ

1 голос
/ 05 мая 2020

можно использовать словарь:

# dummy nodes and graph
nodes = [np.random.randint(0,10031) for a in range(100)]
G = nx.Graph()
G.add_nodes_from(nodes)

# dummy clusters
clusters = [list(np.random.choice(range(len(G.nodes)), np.random.randint(1,5))) for a in range(8)]


# make mapping dictionary:
mapping = {a:b for a, b in zip(range(len(G.nodes)), G.nodes())}

# apply mapping_dictionary:

clusters_with_node_names = []

for c in clusters:
    clusters_with_node_names.append([mapping[a] for a in c])
...