Как найти информацию о родителях узлов в NetworkX? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть график NetworkX, подобный следующему.

g = nx.DiGraph()
g.add_edge('a', 'b')
g.add_edge('b', 'c')
g.add_edge('b', 'd')
g.add_edge('b', 'e')
g.add_edge('e', 'f')

У меня есть функция Python с именем getHop, и она принимает два параметра. Один - node, а другой - hop.

getHop(node, hop):

Если узел f, а прыжок 1, тогда getHop должен вернуть родительский узел (узлы) f. В этом случае это e.

Если узел f, а прыжок 2, тогда getHop должен вернуть старший родительский узел (узлы) f. В этом случае это b.

Если узел равен f, а прыжок равен 3, тогда getHop должен возвращать прародительский узел (узлы) f. В этом случае это a.

Как я могу реализовать вышеупомянутый сценарий в NetworkX. Пожалуйста, дайте мне знать. Заранее спасибо.

1 Ответ

1 голос
/ 08 апреля 2020

Мне не известна функция в библиотеке networkx, которая позволяет вам это делать, но она должна быть довольно простой для построения через al oop в функции, см. Пример ниже, который должен дать ваш результат:

Имейте в виду, что функция предшественников возвращает итератор, поэтому было проще вставить результат функции в список и получить первое значение https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.DiGraph.predecessors.html

def getHop(node, hop):
    if hop == 1: 
        result = list(g.predecessors(node))[0]
    else: 
        for hop_element in range(hop): 
            if hop_element == 0: 
                temp_result = list(g.predecessors(node))[0]
            elif hop_element +1 == hop:
                result = list(g.predecessors(temp_result))[0]
            else: 
                temp_result = list(g.predecessors(temp_result))[0]
    return result
...