2017-03-16 16 views
-1

newbここでは、行列とその変換行列との差をtolleranceと比較しようとしています。まず、正方形であることを確認する必要がありますし、differnceがtolleranceであるかどうかを確認する必要があります。コードの最後の2行に到達できないというエラーが表示されます。出力は、上記のための真の真でなければなりませんが、私は最初の真の取得(すなわち、それは正方行列である。コードに到達できません-error

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;は、ちょうど最後の2行の前にあります。機能は、その時点で返し、これらの行を実行することはありません、彼らが到達不能にしている理由です

をおそらくあなたが最後にその行を移動したい

+0

ありがとうございます。私はそれが正方形か正方形のいずれかであると報告してから、続けます。 – chrischris

+0

私が理解しているように、あなたはそれが正方形であることを「報告する」ことは望ましくありません。あなたはそれが対称である場合に戻ってほしい。あなたが正方形ではないことを知った瞬間に 'False'を返しています。なぜなら、それは対称的ではないからです。あなたがそこに戻らなければ、あなたはそれが正方形であり続けていることを知っています。 'return true'行だけを削除し、' print(result) '、' return result'の代わりに使うべきです。行列が正方形で対称であれば 'True'、正方形で対称でなければ' False'となります。 –

+0

また、実際に対称的であるかどうかを確認する前に "正方形"を印刷したい場合は、 'print'を使います。しかし、返さないでください。あなたが帰ったら、それは機能の終わりです。 –

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) 

あなたのコードは今のところですが、実行のコンテキストが関数の外に戻っているので、最後の2行は決して実行されません。だからこそ、2番目のprint文が表示されないのです。

関連する問題