我正在嘗試生成一個僅包含值 -1 或 0 或 1 但不包含其他值的方陣。該矩陣用作我正在研究的遺傳演算法專案的關系矩陣。對角線必須全為零。
到目前為止,我已經嘗試過:
import numpy as np
n = 5
M = []
for i in range(n):
disc = random.random()
if disc <= 0.33:
M.append(-1)
elif disc > 0.33 and disc <= 0.66:
M.append(0)
else:
M.append(1)
RelMat = np.array(M).reshape(int(sqrt(n)),-1)
np.fill_diagonal(RelMat, 0)
這將為我生成一個包含所有三個值的矩陣,但它不允許我使其對稱。我試圖將它與它的轉置相乘,但是這些值不再正確。
我也試圖讓它與它一起作業:
import numpy as np
N = 5
b = np.random.random_integers(-1,2,size=(N,N))
b_symm = (b b.T)/2
但這會給我0.5作為矩陣中的值,這會造成問題。
我的主要問題是矩陣的對稱性以及矩陣必須包含所有三個數字的條件。任何幫助表示贊賞。
uj5u.com熱心網友回復:
numpy.triu回傳矩陣的上三角部分(它將第 k 個對角線以下的元素設定為 0)。您也可以在同一次呼叫中將主對角線歸零(以避免呼叫fill_diagonal)。
之后b b.T應該會給你一個具有所需值的對稱矩陣。
這是構建矩陣的更緊湊的方法,在本例中為 5x5:
b = np.triu(np.random.randint(-1, 2, size=[5,5]), k=1)
b b.T
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516057.html
標籤:Python麻木的矩阵
上一篇:Matplotlib.pyplot報錯“ValueError:xandymustbethesamesize”回歸分析
