2011-07-13 106 views
2

我有一個代碼,可以隨時向我的網絡中的每個節點分配一個標籤,可以是「向上」或「向下」。如何保持固定在Python中的隨機生成器?

我怎樣才能解決這個隨機標籤爲以後,讓他們不會改變,如果我每次運行我的代碼?

import networkx 
import random 

def assign_nodes(G): 
    state = ['up','down'] 
    for n in G: 
     G.node[n]['sign']=random.choice(state) 
if __name__ =='__main__': 
    input_data = open("data_test.txt",'r') 
    graph = read_graph(input_data) 
    assign_nodes(graph) 

回答

7

使用random.seed(constant)隨機數生成器初始化爲恆定值(用一個你選擇的替代constant)。

+0

感謝您的評論。我的代碼保持錯誤,全局名稱'常量'沒有定義。我假設有什麼缺失? – masti

+0

@masti:一個實際的常量,不是名字'constant'!例如,'random.seed(3643781349)'。 –

+0

您是否閱讀過我在括號中寫的內容?你需要用一個實際的常數值替換我的佔位符'constant'。例如,「0」。 –

0

您可以保存該圖:

from random import random 
import networkx as nx 

def make_graph(): 
    G=nx.DiGraph() 
    N=10 
    #make a random graph 
    for i in range(N): 
     for j in range(i): 
      if 4*random()<1: 
       G.add_edge(i,j) 

    nx.write_dot(G,"savedgraph.dot") 
    return G 

try: 
    G=nx.read_dot("savedgraph.dot") 
except: 
    G=make_graph() #This will fail if you don't use the same seed but have created the graph in the past. You could use the Singleton design pattern here. 
print G.adj 
+0

感謝您的評論,但由於我的圖形非常大,我想多次運行該程序,所以沒有任何意義。 – masti

+0

它可能仍然有意義。每次從磁盤讀取圖形比從頭開始創建一個更快還是更慢?如果您花費大量時間構建圖表,這可能值得測試。 – Wilduck