Loops 带numpy的对称矩阵 来自随机导入的* N=100 伽马=0.7 连接=零((N,N)) 对于范围(N)中的i: 对于范围(i+1)内的j: 如果随机() 连接[i,j]=1 连接[j,i]=1 其他: 连接[i,j]=0 连接[j,i]=0
我想做的是创建一个对称矩阵,填充0和1(概率为0.7的1)。 这是双for循环,非常低效…我将用numpy制作一些东西,我相信它可以大大加快速度? 有人知道如何进行吗?Loops 带numpy的对称矩阵 来自随机导入的* N=100 伽马=0.7 连接=零((N,N)) 对于范围(N)中的i: 对于范围(i+1)内的j: 如果随机() 连接[i,j]=1 连接[j,i]=1 其他: 连接[i,j]=0 连接[j,i]=0,loops,matrix,numpy,symmetric,Loops,Matrix,Numpy,Symmetric,我想做的是创建一个对称矩阵,填充0和1(概率为0.7的1)。 这是双for循环,非常低效…我将用numpy制作一些东西,我相信它可以大大加快速度? 有人知道如何进行吗? 多谢各位 您可以使用numpy random模块生成随机向量,并使用这些向量为矩阵种子。例如: from random import * N = 100 gamma = 0.7 connect = zeros((N,N)) for i in range(N): for j in range(i+1):
多谢各位 您可以使用numpy random模块生成随机向量,并使用这些向量为矩阵种子。例如:
from random import *
N = 100
gamma = 0.7
connect = zeros((N,N))
for i in range(N):
for j in range(i+1):
if random() < gamma:
connect[i,j] = 1
connect[j,i] = 1
else:
connect[i,j] = 0
connect[j,i] = 0
编辑2 这比上面的行版本更简单,速度大约快4倍。此处,三角形矩阵直接由完整的权重矩阵形成,然后添加到其转置中以生成对称矩阵:
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
N=100
伽马=0.7
a=np.triu((np.random.random_sample(size=(N,N))很好。这非常有帮助,我真的很感激!它非常有效如果你发现答案解决了你的问题,那么也许你可以接受答案。
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
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