2014-09-01 44 views
1

我正在做我的Python實驗室練習。 我做了代碼,但我不知道如果矩陣是對稱或扭曲對稱的,我將如何進行測試。問題是: 1.如果矩陣是對稱的或者是偏斜對稱的,則進行測試。 2.我將如何使用斷言來確保矩陣是方陣? 3.有人可以重新檢查我的代碼嗎? 謝謝!測試矩陣是對稱還是斜對稱的?

def symmetric(X): 
H = X.copy() 
D = len(H) 
F = len(H[0]) 
listx = [] 
listy = [] 
for d in range(0,D): 
    listx.append(0) 
for f in range(0,F): 
    listy.append(listx) 
K = np.array(listy) 
for i in range(0,D): 
    for j in range(0,F): 
     K[j][i] = H[i][j] 
return K 

def skewsymmetric(Y): 
H = Y.copy() 
D = len(H) 
F = len(H[0]) 
listx = [] 
listy = [] 
R = -1 
for d in range(0,D): 
    listx.append(0) 
for f in range(0,F): 
    listy.append(listx) 
K = np.array(listy) 
for i in range(0,D): 
    for j in range(0,F): 
     K[j][i] = H[i][j]*R 
return K 

if __name__ == "__main__": 
X = np.array([[20,120,200],[120,10,150],[200,150,30]]) 
Y = np.array([[0,1,-3],[-1,0,-2],[3,2,0]]) 
print "X =", X 
print "Y =", Y 
print "This is Symmetric matrix:", symmetric(X) 
print "This is Skew-symmetric matrix:", skewsymmetric(Y) 

回答

6

有一個簡單的方法來檢查,如果矩陣是對稱的使用numpy的:

(arr.transpose() == arr).all() 

如果你需要檢查它是否是斜對稱,然後在比較更改第二個「改編」的符號:

(arr.transpose() == -arr).all() 
+0

我不能使用轉置我的代碼。因爲我的實驗練習需要使用「for循環」和「斷言」。所以我需要堅持我的代碼,只需要改變一些東西。也可以將這兩種方法合而爲一。 – 2014-09-01 09:44:08

+0

我收到「AttributeError:all not found」。我是否缺少導入或其他內容? – brandones 2016-09-03 19:26:39

+0

我無法重現您的錯誤。也許你的進口有錯誤? 你可以聲明數組沒有問題嗎? – masteusz 2016-09-10 17:20:46