2016-10-19 1 views
2

NetworkX에서 생성 된 그래프 G가 있으면 그래프가 생성 된 후 이후에 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, ...} 

가 어떻게 각 에지 관련 가중치를 부여 할 수 있습니까?이 사소한 경우 모든 가중치는 내가 직접

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

등) G.edges (에 가중치를 추가하려고했습니다 1.

있습니다하지만이 오류 얻을 :

--------------------------------------------------------------------------- 
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이 방법이기 때문에 실패합니다. 나를 위해

예를 들어
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} 

그러나, 코드의 당신의 유형이 실제로 실패

documentation이 같은 작업을 수행 말한다

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

관련 문제