我已經在 SO 上尋找了幾個問題,但找不到這個或弄清楚如何去做。我想從給定的 n生成一個隨機對稱二進制矩陣 (nxn)。
示例 (n=3):
0 0 1 0 0 1
0 0 1 or 0 0 0
1 1 0 1 0 0
我還需要主對角線為零。我知道以后怎么做,但萬一有人已經想用最佳代碼實作它......
uj5u.com熱心網友回復:
您可以對其轉置進行異或隨機矩陣:
a = np.random.randint(0, 2, (n, n))
a ^= a.T
uj5u.com熱心網友回復:
import numpy as np
n = 3
a = np.tril(np.random.randint(0, 2, (n,n)), -1)
print(a a.T)
-1intril將主對角線正下方對角線上方的所有元素設定為零,因此它有效地將主對角線設定為零。
uj5u.com熱心網友回復:
您可以生成一個隨機陣列并用陣列的 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]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368009.html
