Как получить данные для границы между двумя узлами?

Я хочу получить границу между двумя узлами в графе networkx. В частности, я хочу получить некоторые данные, связанные с этим краем. Я априори знаю, что эти два узла связаны. Есть ли функция для этого?


person becko    schedule 09.02.2016    source источник
comment
Что ты конкретно имеешь ввиду? Нарисовать ребро между двумя определенными узлами, которые, как вы знаете, связаны, или искать узлы, у которых есть ребро, а затем вычислять что-то на основе других атрибутов, которыми обладают эти узлы?   -  person Reti43    schedule 09.02.2016
comment
@Reti43 Reti43 Я имею в виду, что если у вас есть два узла, u и v, получите ребро, которое их соединяет.   -  person becko    schedule 09.02.2016
comment
Что-то вроде get_edge_data()? Также есть edges(), но он возвращает список подключенных узлов.   -  person Reti43    schedule 09.02.2016


Ответы (1)


Данные края хранятся в словаре. Чтобы получить доступ к этому словарю, используйте get_edge_data().

import networkx as nx
G=nx.Graph()
G.add_edge(1,2, weight=5)
G.get_edge_data(1,2)
> {'weight': 5}

Если вы хотите перебрать все ребра, вы можете использовать G.edges(data=True)

H = nx.Graph()
H.add_edge(2, 3, color = 'red')
H.add_edge(1, 2, weight = 4)
for u,v,data in H.edges(data=True):
    print(u, v, data)
> 1 2 {'weight': 4}
> 2 3 {'color': 'red'}
person Joel    schedule 09.02.2016
comment
Поэтому я попробовал это с графом, который имеет несколько ребер между двумя узлами, A и B. Одно ребро имеет вес 40, второе ребро имеет значение 50, а третье ребро имеет значение 60. Использование nx.get_edge_data будет вернуть только последнее ребро (со значением 60). Есть ли команда, которая вернет все веса? - person spacedustpi; 24.04.2019
comment
Когда я делаю G.get_edge_data(1,2) для MultiGraph с двумя ребрами между 1 и 2, это дает мне оба ребра и их веса. Если у вас другой опыт, вам, вероятно, следует опубликовать новый вопрос. [Вы уверены, что граф имеет несколько ребер? - если это не MultiGraph или MultiDiGraph, то каждый раз, когда вы добавляете ребро, вы перезаписываете предыдущее ребро] - person Joel; 25.04.2019
comment
Спасибо, я наконец обнаружил Mulitgraph через несколько часов после публикации моего вопроса. - person spacedustpi; 25.04.2019
comment
Для тех, кому интересно, если вы используете nx.Graph() и добавляете ребро от 1 до 2. Вы также можете сказать nx.get_edge_data(2,1). Это получит тот же край - person Gertjan Brouwer; 16.10.2020