首页 > 解决方案 > 如何在 NetworkX 中找到有向路径?

问题描述

所以。我正在尝试通过有向图查找路径。

我从一个包含 3 列的 Pandas 数据框开始:“源”、“目标”、“重量”。权重用于跟踪每个目标的动作(它只是一个数字)。

然后我将 df 转换为边缘列表:

edge_list = nx.from_pandas_edgelist(df, '源','目标','权重')

然后,为了更好地衡量,我将其转换有向图(我相当有信心这是正确发生的)

有向图 = nx.有向图(边缘列表)

但是,每当我开始在图中搜索路径时,都会得到无向路径。我检查并仔细检查,但如果我定义了一个路径

path = nx.shortest_path(directed_graph,source=A,target=B,weight='weight')

遵循图中找到的有向路径无法找到返回的路径。(但是,可以通过遵循无向路径找到它,所以我猜是这样)

标签: pythonnetworkxdirected-graph

解决方案


您可以通过指定直接创建您的有向图 create_using=nx.DiGraph()

g = nx.from_pandas_edgelist(df, 'Source','Target','weight', create_using=nx.DiGraph())

nx.from_pandas_edgelist返回图的实例,而不是边列表,因此您首先创建一个图,然后通过为每个无向边添加两个有向弧将其转换为有(i,j)(j,i)(i,j)

例子:

>>> g=nx.from_edgelist([(1,2),(3,4)])
>>> g.edges()
EdgeView([(1, 2), (3, 4)])
>>> nx.DiGraph(g).edges()
OutEdgeView([(1, 2), (2, 1), (3, 4), (4, 3)])

推荐阅读