如何在NetworkX中找到有向路径?

How to find a directed path in NetworkX?

提问人:user2954167 提问时间:2/26/2020 更新时间:2/26/2020 访问量:899

问:

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

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

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

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

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

directed_graph = nx。二图(edge_list)

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

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

无法通过遵循图中找到的有向路径找到返回的路径。(但是,可以通过遵循无方向路径找到它,所以我想这就是某种东西)

Python NetworkX 有向图

评论


答:

2赞 abc 2/26/2020 #1

您可以通过指定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)])

评论

0赞 user2954167 2/26/2020
非常感谢。这解决了我的问题。
0赞 user2954167 2/27/2020
好的,所以跟进,因为这产生了第二个问题。现在我正在尝试查找我知道存在的路径,但 nx.has_path() 返回 False。