您可以使用numpy隨機模塊生成隨機向量,並使用這些向量來爲矩陣播種。例如:此斜使用numpy.diag
,但可以做到這逐行組裝上部或下部三角形部分,然後用除了形成對稱矩陣
import numpy as np
N = 100
gamma = 0.7
connect = np.zeros((N,N),dtype=np.int32)
for i in range(0,N):
dval = np.diag((np.random.random_sample(size=(N-i))<gamma).astype(np.int32),i)
connect += dval
if (i>0):
connect += dval.T
一樣。我沒有感覺可能會更快。
編輯: 其實此行明智的版本比對角線的版本,我想應該不會那麼奇怪,因爲內存訪問它使用比斜紋組件模式快約5倍。
N = 100
gamma = 0.7
connect = np.zeros((N,N),dtype=np.int32)
for i in range(0,N):
rval = (np.random.random_sample(size=(N-i))<gamma).astype(np.int32)
connect[i,i:] = rval
connect += np.triu(connect,1).T
EDIT 2
這是更簡單,比上述在行版本快約4倍。這裏三角矩陣從權重的全矩陣直接形成,然後添加到它的轉置,以產生對稱矩陣:
N = 100
gamma = 0.7
a=np.triu((np.random.random_sample(size=(N,N))<gamma).astype(np.int32))
connect = a + np.triu(a,1).T
在我測試Linux系統中,第1版大約需要6.5毫秒,第2版大約需要1.5毫秒,版本3大約需要450微秒。
不錯。這是最有幫助的,我真的很感激!它完美地運作 – Aurelio 2011-06-01 11:20:56
如果你發現答案解決了你的問題,那麼也許你可以如此接受答案。 – talonmies 2011-06-01 11:46:24