Как найти направленный путь в NetworkX? - PullRequest
1 голос
/ 26 февраля 2020

Итак. Я пытаюсь найти пути через ориентированный граф.

Я начинаю с фрейма данных Pandas с 3 столбцами: «Источник», «Цель», «Вес». Вес используется для отслеживания действий каждой цели (это просто число).

Затем я преобразовываю df в список ребер:

edge_list = nx.from_pandas_edgelist (df, 'Source', 'Target', 'weight')

Затем, для удобства, я преобразую это в ориентированный граф (и я вполне уверен, что это происходит правильно)

Direct_graph = nx.DiGraph (edge_list )

Однако всякий раз, когда я начинаю искать пути внутри графиков, я получаю ненаправленные пути. Я проверил и дважды проверил, но если я определю путь 1024 * возвращенный путь невозможно найти, следуя указанным путям, найденным на графике. (Однако его можно найти, следуя ненаправленным путям, так что я думаю, это что-то)

1 Ответ

2 голосов
/ 26 февраля 2020

Вы можете непосредственно создать свой орграф, указав 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)])
...