在 Python 中生成随机对称二进制矩阵

Generate a random symmetric binary matrix in Python

我已经在 SO 上寻找了几个问题,但找不到这个或弄清楚如何去做。我想根据给定的 n.

生成随机 symmetric 二进制矩阵 (n x n)

示例 (n=3):

    0 0 1         0 0 1 
    0 0 1   or    0 0 0
    1 1 0         1 0 0
              

我还需要主对角线为零。我知道以后怎么做,但万一有人想用最佳代码实现它...

你可以生成一个随机数组,并用数组旋转 180° 填充一个三角形。最后,用 0.

填充对角线
N = 3
a = np.random.randint(2,size=(N,N))
a[np.tril_indices(N)] = np.rot90(a, k=2)[np.tril_indices_from(a)]
np.fill_diagonal(a, 0)

或者,您可以使用更快的 XOR(如果 X 与 Y 不同,则 X^Y 产生 1):

N = 3
a = np.random.randint(2,size=(N,N))
(a^np.rot90(a, k=2))
np.fill_diagonal(a, 0)

N=3 的示例:

array([[0, 1, 1],
       [0, 0, 0],
       [1, 1, 0]])

N=5 的示例:

array([[0, 1, 1, 1, 0],
       [1, 0, 1, 1, 0],
       [0, 1, 0, 1, 0],
       [0, 1, 1, 0, 1],
       [0, 1, 1, 1, 0]])
import numpy as np

n = 3
a = np.tril(np.random.randint(0, 2, (n,n)), -1)
print(a + a.T)

-1 in tril 将主对角线正下方对角线上的所有元素设置为零,因此它有效地将主对角线设置为零。

你可以用它的转置异或一个随机矩阵:

a = np.random.randint(0, 2, (n, n))
a ^= a.T