Rya*_*yan 27 python random numpy matrix adjacency-matrix
我试图在numpy中生成对称矩阵.具体地说,这些矩阵具有随机位置条目,并且在每个条目中内容可以是随机的.沿着主对角线,我们并不关心那里的内容,所以我也将它们随机化了.
我采用的方法是首先生成一个nxn全零矩阵,然后简单地循环遍历矩阵的索引.但是,考虑到在python中考虑循环是相对昂贵的,我想知道我是否可以在不使用python的for循环的情况下实现相同的功能.
是否有一些内置于numpy中的东西可以让我更有效地实现我的目标?
这是我目前的代码:
import numpy as np
import random
def empty(x, y):
return x*0
b = np.fromfunction(empty, (n, n), dtype = int)
for i in range(0, n):
for j in range(0, n):
if i == j:
b[i][j] = random.randrange(-2000, 2000)
else:
switch = random.random()
random.seed()
if switch > random.random():
a = random.randrange(-2000, 2000)
b[i][j] = a
b[j][i] = a
else:
b[i][j] = 0
b[j][i] = 0
Run Code Online (Sandbox Code Playgroud)
Jos*_*del 41
你可以这样做:
import numpy as np
N = 100
b = np.random.random_integers(-2000,2000,size=(N,N))
b_symm = (b + b.T)/2
Run Code Online (Sandbox Code Playgroud)
您可以在np.random等效的scipy模块中选择您想要的任何分布.
更新:如果您正在尝试构建类似图形的结构,请务必查看networkx包:
它有许多内置例程来构建图形:
http://networkx.lanl.gov/reference/generators.html
此外,如果要添加一些随机放置的零,您始终可以生成一组随机索引并将值替换为零.
Ben*_*man 24
我最好这样做:
a = np.random.rand(N, N)
m = np.tril(a) + np.tril(a, -1).T
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,矩阵的所有元素都来自相同的分布(在这种情况下是均匀的).