2017-03-16 98 views
-1

newb在這裏,我想比較一個矩陣和它的轉矩矩陣與tollerance之間的差異。首先,我需要檢查它是一個正方形,然後如果差異與tollerance.I出現錯誤,最後兩行代碼無法訪問。輸出應該是真真爲以上,但我只得到了第一個真正的(即它是一個方陣。代碼無法訪問 - 錯誤

import numpy as np 
a= np.array(([[1, 2, 3,],[2, 3, 4],[3, 4, 1]])) 

def check_symmetric(a,tol): 
    b = a.transpose(1, 0) 
    print (a) 
    print(b) 
    rows = a.shape[1] 
    col = a.shape[0] 
    z= abs(a-b) 
    print(z) 
    if rows != col: #check to make sure the list is a square 
      return False 
    return True; 
    result = (abs(a - b) <= tol).all() 
    print(result) 



print check_symmetric(a,tol=1e-8) 

回答

0

有一個return True;剛剛過去的兩行之前,該函數將返回在這一點上,和永遠不會執行這些線這就是爲什麼他們不可達

最可能的是,你要到該行移動到結束

+0

謝謝,我如何讓它報告它是正確的或假的正方形,然後繼續。 – chrischris

+0

據我所知,你不想「報告」它是方形的。如果它是對稱的,你想返回。當你知道它不是方形的時候,你會返回'假',因爲那樣它就不可能是對稱的。如果你不回到那裏,你知道它是方形的,繼續下去。你應該刪除'return True'行,而不是'print(result)','return result'。如果矩陣是正方形和對稱的,那麼這將是「真」;如果是正方形而不是對稱,則爲「假」。 –

+0

或者,如果要在檢查它是否真正對稱之前打印「是的,它是方形的」,然後使用「打印」。但不要回報。如果你返回,那就是函數的結束。 –

1

將您return語句函數的底部:?

return True; 
result = (abs(a - b) <= tol).all() 
print(result) 

將成爲:

result = (abs(a - b) <= tol).all() 
print(result) 
return True; 

return語句將停止功能的執行和控制返回給它從所謂的背景下,在這種情況下,行:

print check_symmetric(a,tol=1e-8) 

這意味着您的代碼現在的方式,最後兩行永遠不會執行,因爲執行的上下文已經回到函數的外部。這就是爲什麼你沒有看到第二次印刷聲明。