2016-10-19 4 views
2

Angesichts irgendeines Graphen G, der in NetworkX erstellt wurde, möchte ich G.edges() einige Gewichtung zuweisen können, nachdem das Diagramm erstellt wurde. Die beteiligten Graphen sind Gitter, erdos-reyni, barabasi-albert und so weiter.NetworkX: Wie man Gewichte zu einer vorhandenen G.edges() hinzufügt?

mein G.edges() Gegeben:

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

Und mein 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, ...} 

Wie kann ich jede Kante die entsprechende Gewicht zuweisen? In diesem trivialen Fall alle Gewichte sind 1.

Ich habe versucht, die Gewichte zu G.edges() direkt wie diese

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

Aber ich bekomme diese Fehlermeldung hinzuzufügen:

--------------------------------------------------------------------------- 
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__' 

Was ist los? Da G.edges() eine Liste ist, warum kann ich nicht wie bei jeder anderen Liste auf ihre Elemente zugreifen?

Antwort

2

Es schlägt fehl, weil edges eine Methode ist.

Die documentation sagt dies wie zu tun:

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

Zum Beispiel die folgenden Werke für mich:

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} 

jedoch Ihre Art von Code in der Tat nicht:

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__' 

In yo Ihr Fall würde ich vorschlagen

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

In Ordnung, also, was schlagen Sie vor? – FaCoffee

+1

@ CF84 Siehe Aktualisierung. –

+0

Danke. Da ich später auf den Randdatenschlüssel zugreifen muss, der dem Gewicht zugeordnet ist (ich muss die Inzidenzmatrix berechnen), was wäre das in Ihrem Beispiel? Ich kann es nicht finden, also nehme ich an, dass es keine gibt. Wie man es hinzufügt? – FaCoffee

Verwandte Themen