在 Numpy 中生成对称矩阵

新手上路,请多包涵

我正在尝试在 numpy 中生成对称矩阵。具体来说,这些矩阵要有随机放置的条目,并且在每个条目中的内容可以是随机的。沿着主对角线,我们不关心那里有什么条目,所以我也将它们随机化了。

我采用的方法是首先生成一个 nxn 全零矩阵,然后简单地遍历矩阵的索引。我怎样才能使用 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

原文由 Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

你可以做类似的事情:

 import numpy as np

N = 100
b = np.random.random_integers(-2000,2000,size=(N,N))
b_symm = (b + b.T)/2

您可以在 np.random 或等效的 scipy 模块中选择您想要的任何发行版。

更新: 如果你正在尝试构建类似图形的结构,一定要检查 networkx 包:

http://networkx.lanl.gov

它有许多内置的例程来构建图形:

http://networkx.lanl.gov/reference/generators.html

此外,如果您想添加一些随机放置的零,您始终可以生成一组随机索引并将这些值替换为零。

原文由 JoshAdel 发布,翻译遵循 CC BY-SA 3.0 许可协议

我最好这样做:

 a = np.random.rand(N, N)
m = np.tril(a) + np.tril(a, -1).T

因为在这种情况下,矩阵的所有元素都来自 相同的分布(在这种情况下是均匀的)。

原文由 Ben Usman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题