2013-06-05 3 views
0

Im, использующий python 2.7 и networkx и im, используя convert_node_labels_to_integers. Он отлично справляется со своей работой. Если я прошу его не выбрасывать старые этикетки им не получить то, что я ожидалnetworkx convert_node_labels_to_integers

g = nx.Graph() 
g.add_edge('a','b') 
g2 = nx.convert_node_labels_to_integers(g, discard_old_labels=False) 
print g2[0] 

g2 [0] не имеет атрибутов, когда я думал, что теперь будет иметь атрибут «old_labels» со старым лейблом в нем.

Я делаю что-то неправильно? Я неправильно истолковал, как это работает? Я должен был пропустить что-то простое.

Благодаря

ответ

1

Старые метки хранятся в атрибуте графа - node_labels.

print g2.node_labels 
{'a': 0, 'b': 1} 
+0

Похоже NetworkX документации неверен он говорит: ... создать атрибут узла «old_label» держать старые этикетки Должен сказать: .. . создать атрибут графа 'node_labels' –

+0

Спасибо @Joe. Ive использовал networkx совсем немного и никогда не замечал атрибутов графика раньше. Не совсем уверен, где еще я буду использовать эту функцию – Art

2

В последней версии (разработка, которая вскоре станет сетевой версией 1.8) NetworkX это обрабатывается по-разному. Старые метки необязательно могут быть сохранены в качестве узла atrributes

In [1]: import networkx as nx 

In [2]: G = nx.Graph([('a','b'),('b','c')]) 

In [3]: H = nx.convert_node_labels_to_integers(G,label_attribute='old_label') 

In [4]: H.node 
Out[4]: {0: {'old_label': 'a'}, 1: {'old_label': 'c'}, 2: {'old_label': 'b'}}