Как преобразовать граф в список всех путей, используя матрицу смежности через networkx? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь использовать библиотеку networkx из python, чтобы найти все пути из моего набора данных в виде фрейма данных, так как я прикрепил захваченный экран из того, что я сделал.

enter image description here

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

from functools import partial
all_paths = partial(nx.all_simple_paths, graph)
all_paths
for x in partial(nx.all_simple_paths, graph):
    print(x)

Пример ожидаемого результата будет примерно таким:

[[1, 2, 5], [1, 2, 5, 16]]

Есть ли какие-либо предложения?

1 Ответ

0 голосов
/ 14 февраля 2020

Согласно do c, all_simple_paths найдите все пути между двумя заданными узлами, которые отсутствуют в вашем коде. И я думаю, что вы можете неправильно понять, что делает partial. Насколько я понимаю, partial повторяет выполнение функции (1-й аргумент) несколько раз (2-й аргумент).

Один из способов найти все пути в сети - найти все возможные пары узлов, а затем пути, соединяющие пары.

Пример:

from itertools import combinations
import numpy as np
import networkx as nx

a = np.array([
    [0, 1, 0, 1, 0, 0], 
    [1, 0, 1, 0, 0 ,0], 
    [0, 1, 0, 1, 0, 0], 
    [1, 0, 1, 0, 0, 0], 
    [0, 0, 0, 0, 0, 1], 
    [0, 0, 0, 0 ,1, 0]
])
g = nx.from_numpy_array(a)

for x, y in combinations(g.nodes, 2):
    for p in nx.all_simple_paths(g, x, y):
        print(p)

# Output
# [0, 1]
# [0, 3, 2, 1]
# [0, 1, 2]
# [0, 3, 2]
# [0, 1, 2, 3]
# [0, 3]
# [1, 0, 3, 2]
# [1, 2]
# [1, 0, 3]
# [1, 2, 3]
# [2, 1, 0, 3]
# [2, 3]
# [4, 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...