Networkx:如何将节点一分为二,有效地断开边缘?
Networkx: how to split nodes into two, effectively disconnecting edges?
如何将无向图中的节点拆分为两个新节点,以便允许通过原始节点的路径的两条边现在成为两个死胡同?我需要将原始节点的属性保留到新节点中。这是一个例子:
| |
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
如何将无向图中的节点拆分为两个新节点,以便允许通过原始节点的路径的两条边现在成为两个死胡同?我需要将原始节点的属性保留到新节点中。这是一个例子:
| |
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