具有numpy的对称矩阵
|
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
我试图做的是创建一个对称矩阵,该矩阵填充有零和一(概率为0.7的一个)。
这是double for循环,效率很低...我将用numpy制作一些东西,我相信这可以大大加快速度吗?
有人知道如何进行吗?
非常感谢你!
没有找到相关结果
已邀请:
1 个回复
渐首洽陈染
使用
对角线进行此操作,但是您可以按行将其组合成上部或下部三角形部分,然后使用加法来形成对称矩阵。我不觉得这可能会更快。 编辑: 实际上,这种逐行版本比对角版本快大约5倍,考虑到与对角线汇编相比,它使用的内存访问模式,我认为这并不奇怪。
编辑2 这甚至比上面的逐行版本更简单,并且快约4倍。在这里,三角形矩阵直接由权重的完整矩阵构成,然后添加到其转置中以生成对称矩阵:
在我对其进行测试的Linux系统上,版本1大约需要6.5毫秒,版本2大约需要1.5毫秒,版本3大约需要450微秒。