Я заметил, что после объединения двух узлов происходит странное поведение с некоторыми ссылками. Я протестировал 2 сценария ios, 1) с 3 узлами; 2) с 4 узлами.
Сценарий1
G1 = nx.Graph()
G1.add_node(1,name='r1')
G1.add_node(2,name='r2')
G1.add_node(3,name='n1')
G1.add_edges_from([(1,2),(2,3),(1,3)])
nx.write_graphml(G1,'G1.graphml')
Предыдущий производит эту сеть:
После этого я объединяю узлы r1
и r2
. Я ожидал, что узел n1
будет иметь 2 ссылки на r1
, но этого не происходит.
Примечание: чтобы создать файл graphml
, мне пришлось удалить contration
атрибут с узла r1
.
G2 = nx.contracted_nodes(G1,1,2)
In [342]: G2.nodes(data=True)
Out[342]: NodeDataView({1: {'name': 'r1', 'contraction': {2: {'name': 'r2'}}}, 3: {'name': 'n1'}})
del G2.nodes[1]['contraction']
In [345]: G2.nodes(data=True)
Out[345]: NodeDataView({1: {'name': 'r1'}, 3: {'name': 'n1'}})
nx.write_graphml(G2,'G2.graphml')
Сценарий2
Но, если сеть имеет более 3 узлов, нет отсутствующих ссылок.
G3 = nx.Graph()
G3.add_node(1,name='r1')
G3.add_node(2,name='r2')
G3.add_node(3,name='n1')
G3.add_node(4,name='n2')
G3.add_edges_from([(1,2),(2,3),(3,4),(4,1)])
nx.write_graphml(G3,'G3.graphml')
После этого снова объединяем узлы r1
и r2
.
G4 = nx.contracted_nodes(G3,1,2, self_loops=True)
G4.nodes(data=True)
del G4.nodes[1]['contraction']
nx.write_graphml(G4,'G4.graphml')
Эпилог
Моя идея состояла в том, чтобы объединить два узла, например как r1
и r2
, но при этом сохраняются обе исходные ссылки, такие как:
Любая подсказка?
Спасибо !!