您可以使用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