我有一个networkx图,我想根据节点类型来削减它,并组合不直接连接我想要的节点类型的边。
例如,如果我有一个商店和道路的图表,如下所示:Store1 -> Road1 -> Road2 -> Road3 -> Store 2
然后我想修改图表,因此我们只保留“Store”边,因此最终图表看起来像 Store1 -> Store2。在 NetworkX 中是否有一种干净的方法可以做到这一点?
contracted_edge
:
G = nx.from_edgelist([('Store1', 'Road1'),
('Road1', 'Road2'),
('Road2', 'Road3'),
('Road3', 'Store2')],
create_using=nx.DiGraph)
drop = {n for n in G if n.startswith('Road')}
# {'Road1', 'Road2', 'Road3'}
for n in drop:
G = nx.contracted_edge(G, (next(G.predecessors(n)), n),
self_loops=False)
输出:
contracted_nodes
的变体:
for n in drop:
G = nx.contracted_nodes(G, next(G.predecessors(n)), n,
self_loops=False)