2016-10-19 11 views
2

Для любого графика G, созданного в NetworkX, я хочу, чтобы иметь возможность присваивать некоторые веса G.edges() после, граф создан. Графы включают сетки, erdos-reyni, barabasi-albert и т. Д.NetworkX: как добавить вес к существующему G.edges()?

Учитывая мой G.edges():

[(0, 1), (0, 10), (1, 11), (1, 2), (2, 3), (2, 12), ...] 

И мой weights:

{(0,1):1.0, (0,10):1.0, (1,2):1.0, (1,11):1.0, (2,3):1.0, (2,12):1.0, ...} 

Как я могу присвоить каждое ребро соответствующего веса? В этом тривиальном случае все веса равны 1.

Я пытался добавить веса к G.edges() непосредственно, как этот

for i, edge in enumerate(G.edges()): 
    G.edges[i]['weight']=weights[edge] 

Но я получаю эту ошибку:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-48-6119dc6b7af0> in <module>() 
    10 
    11 for i, edge in enumerate(G.edges()): 
---> 12  G.edges[i]['weight']=weights[edge] 

TypeError: 'instancemethod' object has no attribute '__getitem__' 

Что случилось? Поскольку G.edges() - это список, почему я не могу получить доступ к его элементам, как к любому другому списку?

ответ

2

Это не удается, потому что edges - это метод.

documentation говорит, чтобы сделать это, как:

G[source][target]['weight'] = weight 

Например, следующие работы для меня:

import networkx as nx 

G = nx.Graph() 

G.add_path([0, 1, 2, 3]) 

G[0][1]['weight'] = 3 

>>> G.get_edge_data(0, 1) 
{'weight': 3} 

Однако ваш тип кода действительно не удается:

G.edges[0][1]['weight'] = 3 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-14-97b10ad2279a> in <module>() 
----> 1 G.edges[0][1]['weight'] = 3 

TypeError: 'instancemethod' object has no attribute '__getitem__' 

В лету ур случае, я бы предложил

for e in G.edges(): 
    G[e[0]][e[1]] = weights[e] 
+0

Хорошо, так что вы предлагаете? – FaCoffee

+1

@ CF84 См. Обновление. –

+0

Спасибо. Поскольку мне позже нужно получить доступ к ключевому ключу данных, связанному с весом (мне нужно вычислить матрицу инцидентов), что бы это было в вашем примере? Я не могу найти его, поэтому я предполагаю, что его нет. Как его добавить? – FaCoffee