#python-3.x #graph #networkx
#python-3.x #График #networkx
Вопрос:
Я пытаюсь получить соседние узлы терминального узла в Networkx
import networkx as nx
tail = [1,2,3]
head = [2,3,4]
ed_ls = [(t, h) for t, h in zip(tail, head)]
G = nx.OrderedDiGraph()
G.add_edges_from(ed_ls)
print(G[4])
print(G.in_edges(nbunch=[4]))
Я не уверен, почему возвращается пустой dict.
Есть предложения?
Ответ №1:
G[4]
возвращает пустой словарь, поскольку исходящее ребро от узла отсутствует. Тогда как, G.in_edges(nbunch=[4])
возвращает (3, 4)
, который является ребром, содержащим узел 4
.
Если я правильно понимаю, вы конкретно хотите получить доступ к соседям терминального узла? Теперь в этом случае соседи терминального узла являются просто предшественниками узла (поскольку у узла нет преемников), вы можете просто попробовать функцию Digraph.precediators:
print(list(G.predecessors(4)))
# Output : [3]
Рассмотрим другой пример с большим количеством ребер:
import networkx as nx
tail = [1, 2, 3, 4, 2, 3]
head = [2, 3, 4, 5, 5, 5]
ed_ls = [(t, h) for t, h in zip(tail, head)]
G = nx.OrderedDiGraph()
G.add_edges_from(ed_ls)
print(list(G.predecessors(5)))
# Output: [4, 2, 3]
Обновить
Причина, по которой even G.neighbors[4]
return an empty возвращает пустой результат, заключается в том, что в случае орграфов DiGraph.neighbors
и DiGraph.successors
совпадают. Вы можете видеть из исходного кода здесь. Поскольку для терминального узла нет преемника, следовательно, мы получаем пустой список.
Комментарии:
1. Спасибо. Но мне непонятно, почему даже G.neighbors (4) не работает. В документации показано, что это работает для орграфа. Не могли бы вы пояснить, почему все они ищут только исходящее ребро?