在 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
我已经在 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