Ich versuche, eine Funktion mit den Argumenten (a,tol=1e-8)
, die einen booleschen Wert zurückgibt, der dem Benutzer sagt, ob die Matrix symmetrisch ist oder nicht (symmetrische Matrix ist gleich seiner Transponierung). Bisher habe ich:Überprüfen, ob eine Matrix in Numpy symmetrisch ist
def check_symmetric(a, tol=1e-8):
if np.transpose(a, axes=axes) == np.transpose(a, axes=axes):
return True
def sqr(s):
rows = len(s)
for row in sq:
if len(row) != rows:
return False
return True
if a != sqr(s):
raise ValueError
obwohl ich eine axes isn't defined
Nachricht erhalte, damit ich bin ziemlich sicher, dass überhaupt nicht funktioniert ...... die Tests Ich mag würde passieren, sind:
e = np.eye(4)
f = np.diag([1], k=3)
g = e[1:, :]
print(check_symmetric(e))
print(not check_symmetric(e + f))
print(check_symmetric(e + f * 1e-9))
print(not check_symmetric(e + f * 1e-9, 1e-10))
try:
check_symmetric(g)
print(False)
except ValueError:
print(True)
Jede Hilfe wird geschätzt, danke!
Angenommen, Ihre Matrizen verwenden nur 2D sind, müssen Sie eine Achsen Schlüsselwort nicht brauchen. Außerdem sollten Sie eine Matrix nicht transponiert halten und dann die Transponierte der Matrix überprüfen. Im Moment prüfen Sie die Gleichheit zweier transponierter Matrizen. – Paul
Die gestrige Frage zum symmetrischen Matrixtest: http://stackoverflow.com/questions/42876082/python-numpy-see-if-an-array-is-symmetric-within-a-tolerance – hpaulj
oh danke für den Link ... obwohl ich anfing, es irgendwie arbeiten zu lassen, obwohl meine Tests nicht ganz richtig waren: 'def check_symmetric (a, tol = 1e-8): wenn np.transpose (a.any()) == np.array (a.any()): return true def sqr (e): rows = len (s) für Zeile in sq: wenn len (Zeile) = Zeilen: return false return true wenn ein ! = sqr (s): raise ValueError' – plshalp