NetworkX - 基于节点过滤器的折叠图边

问题描述 投票:0回答:1

我有一个networkx图,我想根据节点类型来削减它,并组合不直接连接我想要的节点类型的边。

例如,如果我有一个商店和道路的图表,如下所示:Store1 -> Road1 -> Road2 -> Road3 -> Store 2

然后我想修改图表,因此我们只保留“Store”边,因此最终图表看起来像 Store1 -> Store2。在 NetworkX 中是否有一种干净的方法可以做到这一点?

python graph networkx breadth-first-search
1个回答
0
投票

您可以过滤节点然后使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.