Объединить ребра, когда степень узла n в сети x - PullRequest
1 голос
/ 30 мая 2019

У меня есть ненаправленный график следующим образом:

import networkx as nx
import matplotlib.pyplot as plt

l = [('1','2'),('2','3'),('3','4'),('3','5'),('1','6'),('6','7'),('6','8'),('9','8')]

G=nx.Graph()
G.add_edges_from(l)
nx.draw_networkx(G,with_labels=True)
plt.show()

enter image description here

Я хочу объединить ребра, когда узел удовлетворяет degree=n(like 2).Мне нужно удалить узлы 1, 2 и 8 и подключить 3-6 и 6-9 в моем примере.Поэтому я ожидаю, что результаты будут следующими.enter image description here

Как я могу это сделать?Заранее благодарим

1 Ответ

1 голос
/ 30 мая 2019
import networkx as nx
import matplotlib.pyplot as plt

l = [('1','2'),('2','3'),('3','4'),('3','5'),('1','6'),('6','7'),('6','8'),('9','8')]

G=nx.Graph()
G.add_edges_from(l)

# Select all nodes with only 2 neighbors
nodes_to_remove = [n for n in G.nodes if len(list(G.neighbors(n))) == 2]

# For each of those nodes
for node in nodes_to_remove:
    # We add an edge between neighbors (len == 2 so it is correct)
    G.add_edge(*G.neighbors(node))
    # And delete the node
    G.remove_node(node)

nx.draw(G,with_labels=True)

enter image description here

...