UpStream и DownStream узлов в NetworkX - PullRequest
0 голосов
/ 30 января 2020

Узлы и края NetworkX

Я новичок в Networkx в Python. Я пытаюсь выбрать узел и получить все узлы выше и ниже этого узла. Например, для восходящего узла 2 я хочу вернуть узлы 1, 6 и 7. А для нижестоящего узла 2 я хочу вернуть 3, 4, 8, 9 и 5. Порядок узлов не имеет значения. Есть ли быстрый способ вернуть их в виде списка?

1 Ответ

0 голосов
/ 31 января 2020

Я предполагаю, что в восходящем / нисходящем направлении это ориентированный граф, и вы имеете в виду входящие / исходящие ребра и их родителей / детей? Вы можете использовать поиск по ширине первого дерева (bfs_tree).

См .: https://networkx.github.io/documentation/stable/reference/algorithms/traversal.html

Пример:

g = nx.DiGraph()
g.add_edges_from([
    (7,6), 
    (6,2), 
    (6,1), 
    (1,2), 
    (2,4), 
    (2,3), 
    (3,4), 
    (4,8), 
    (4,9),
    (3,5)
])

upstream = [n for n in nx.traversal.bfs_tree(g, 2, reverse=True) if n != 2]
downstream = [n for n in nx.traversal.bfs_tree(g, 2) if n != 2]

Но если я ошибаюсь, вам нужно уточнить, что вы имеете в виду под апстримом / downstream, потому что график, который вы показали, выглядит ненаправленным.

...