Python Networkx:如何将节点一分为二,有效地断开边?
如何将无向图中的一个节点拆分为两个新节点,使允许路径通过原始节点的两条边现在成为两个死胡同?我需要将原始节点的属性保留到新节点中。以下是一个例子:Python Networkx:如何将节点一分为二,有效地断开边?,python,networkx,Python,Networkx,如何将无向图中的一个节点拆分为两个新节点,使允许路径通过原始节点的两条边现在成为两个死胡同?我需要将原始节点的属性保留到新节点中。以下是一个例子: | | 4---1---2---3---5 => 4---1---2 2---3---5 | | (one graph) (two disjointed graphs) 我看不到在同一
| |
4---1---2---3---5 => 4---1---2 2---3---5
| |
(one graph) (two disjointed graphs)
我看不到在同一个图中有两个节点具有相同名称的方法 下面是一个复制节点、重命名节点和重建边的函数:
def split_node(G, node):
edges = G.edges(node, data=True)
new_edges = []
new_nodes = []
H = G.__class__()
H.add_nodes_from(G.subgraph(node))
for i, (s, t, data) in enumerate(edges):
new_node = '{}_{}'.format(node, i)
I = nx.relabel_nodes(H, {node:new_node})
new_nodes += list(I.nodes(data=True))
new_edges.append((new_node, t, data))
G.remove_node(node)
G.add_nodes_from(new_nodes)
G.add_edges_from(new_edges)
return G