it-swarm.com.de

Überprüfen, ob eine Matrix in Numpy symmetrisch ist

Ich versuche, eine Funktion mit den Argumenten (a,tol=1e-8) zu erstellen, die einen booleschen Wert zurückgibt, der dem Benutzer mitteilt, ob die Matrix symmetrisch ist oder nicht (die symmetrische Matrix entspricht ihrer Transponierung). Bisher habe ich:

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 ständig eine axes isn't defined-Nachricht bekomme, bin ich mir ziemlich sicher, dass das überhaupt nicht funktioniert. Die Tests, die ich gerne bestehen würde, 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!

11
plshalp

Sie können einfach allclose verwenden.

def check_symmetric(a, tol=1e-8):
    return numpy.allclose(a, a.T, atol=tol)
29
Nils Werner

Die folgende Funktion löst auch das Problem:

def check_symmetric(a, tol=1e-8):
    return not False in (np.abs(a-a.T) < tol)
0