Добавление атрибута к узлам с помощью networkX - PullRequest
0 голосов
/ 27 июня 2018

Я рассчитал оптимальное количество сетей для каждого узла с помощью igraph, и вот код, который я использовал.

import igraph
g = igraph.Graph.Read_Ncol('data.txt')
dendrogram = g.community_edge_betweenness()
clusters = dendrogram.as_clustering()
membership = clusters.membership

А теперь я хотел бы использовать функцию set_node_attributes в networkX, чтобы пометить каждый узел количеством его сообществ. Так что, если я запускаю nx.get_node_attributes(g,'counts'), он должен выдать

{123: 2,
 124: 3,
 125: 4 and so on} where "123" is a node and "2" is the count associated 

Я думаю использовать цикл for здесь, но не знаю, с чего начать.

РЕДАКТИРОВАНИЕ:

membership
#output: 
[2,
 3,
 4]

1 Ответ

0 голосов
/ 27 июня 2018

Я предполагаю, что membership - это словарь с узлами в качестве ключей и считается как значение, затем в зависимости от версии networkx, которую вы используете (я использую v2.1), проверьте синтаксис set_node_attributes, для версия 2. 1, это set_node_attributes(G, values, name=None), так что вы просто делаете

nx.set_node_attributes(G, membership, 'counts')

print G[123]['count']
#output 2

Затем используйте get_node_attributes для извлечения того же словаря, вот так

attribute_dict = nx.get_node_attributes(G, 'counts')

print attribute_dict[123]
#output : 2

Обновление : если предположить, что membership является списком отсчетов, то он будет в том же порядке, что и G.nodes(), поэтому мы можем

node_list = list(G.nodes())

count_dict = { k:v for k,v in zip(node_list,membership)}

затем сделайте

nx.set_node_attributes(G, count_dict, 'counts')
...