2015-01-27 4 views
-1

У меня есть networkx digraph с атрибутами на узлах, и я хочу найти все ребра, где атрибут конкретного узла отличается. Есть ли способ сделать это автоматически, или мне нужно перебирать edge_iter(data=True) и найти их самостоятельно?найти грани в сетиx, которые соответствуют определенным критериям

+0

Что вы имеете в виду под «конкретный атрибут узла отличается»? Можете ли вы привести конкретный пример? Моя первоначальная интуиция заключалась бы в том, чтобы перебирать те узлы, которые имеют различное значение. – Joel

+0

ah - вы имеете в виду те ребра, для которых атрибут для одного узла отличается от другого? – Joel

+0

Предполагая, что вы хотите вернуть ребро, если атрибут узла 1! = Атрибут узла 2, то я не думаю, что вы можете сделать лучше, чем взять итератор для ребер и дать только те, у которых атрибуты не равны. Единственной альтернативой, которую я бы предложил, было бы, если бы было только небольшое количество значений атрибутов. Таким образом, вы можете сделать его многогранным графиком и каким-то образом выкинуть края внутри определенного компонента. Но в принципе, я думаю, что ответ «найти их сам». – Joel

ответ

1

Там нет встроенной функции для этого, но это довольно просто:

import networkx as nx 

G = nx.Graph() 
G.add_node(1,color='red') 
G.add_node(2,color='red') 
G.add_node(3,color='blue') 
G.add_node(4,color='blue') 

G.add_edges_from([(1,2),(1,3),(3,4)]) 

for (u,v) in G.edges_iter(): 
    if G.node[u]['color'] != G.node[v]['color']: 
     print u,v 
Смежные вопросы