2016-04-03 3 views
0

Ich versuche, einen Knoten in ein leeres Diagramm mit einem Attribut hinzuzufügen, die ich eine ganze Zahl sein muss. Allerdings ist es nicht zu hinzuzufügen scheint, weil, wenn ich (G) drucken Sie es mir gibt keineErhalten eines leeren Diagramms, obwohl ich einen Knoten in Networkx hinzufügen

Hier ist mein Code:

def heirarchy_graph(n,e,l): 
''' 
n is number of nodes in graph, 
e is the Expansion Rate. This is the number of people on each level 
    If n/e has a remainder then the last level has that many 
    people in it. 
l is the Level connection. It is the probability that a person is connected to someone 
    within the level they belong to. 
''' 
G = nx.Graph() 
G.name="heirarchy_graph(%s,%s,%s)"%(n,e,l) 

r = (n-1)%e 
s = (n-r-1)/e 
h = s + 1 
G = empty_graph(n=0) 

G = G.add_node(0, level=int(0)) 
print(G) 
for i in range(s): 
    list = range(1,(e+1)) 
    A = nx.Graph() 
    #for item in list: 
     #create e nodes with attribute level='i' 
    A.add_nodes_from(list,level=int(i)) 

    # add edges between nodes with probability l 
    names = A.nodes() 

    for name in names: 
     B = non_neighbors(A,name) 
     for u in B: 
      q = random.uniform(0,1) 
      if q <= l: 
       A.add_edge(u,name) 
    return A 
    print(A) 
    G = nx.disjoint_union(G,A) 


if r != 0: 
    h = s+1 
    list = range(1,(r+1)) 
    A = nx.Graph() 
    #create e nodes with attribute level='i' 
    A.add_nodes_from(list,level=int(h)) 
    # add edges between nodes with probability l 
    names = A.nodes() 
    for name in names: 
     B = non_neighbors(A,name) 
     for u in B: 
      q = random.uniform(0,1) 
      if q <= l: 
       A.add_edge(u,name) 
    return A 

    G = nx.disjoint_union(G,A) 

return G 

Das Ergebnis des Drucks (G) ist kein

Jede Hilfe würde sehr geschätzt werden. Danke im Voraus.

+0

Ich glaube, Sie andere Probleme haben als gut: Sie haben 'A' zurück. In dem Moment, in dem Ihre Funktion diese Zeile erreicht, gibt sie 'A' an das zurück, was sie aufgerufen hat, und stoppt weitere Berechnungen in dieser Funktion. Es wird also nur das erste Mal durch die erste Schleife ausgeführt. Es wird nicht weiter kommen. – Joel

+0

Ein weiteres Problem: Ich nehme an, dies ist nur eine vorübergehende Sache, aber jetzt fügen Sie Kanten mit der Wahrscheinlichkeit 1 hinzu. So könnten Sie die Zufallsgenerierung und Tests überspringen, wenn Sie einfach die Kanten die ganze Zeit hinzufügen. – Joel

+0

Wenn Sie später Kanten mit einer kleineren Wahrscheinlichkeit hinzufügen, sollten Sie einen Blick auf 'nx.fast_gnp_random_graph' werfen. – Joel

Antwort

0

Die Methode add_node ist zustandsbehaftet und ändert das Diagramm G direkt. Da add_node nichts zurückgibt, wenn Sie versuchen, G zuzuweisen, ist GNone.

Versuchen:

G.add_node(0, level=int(0))