J'essaie de créer une fonction avec les arguments (a,tol=1e-8)
qui renvoie une valeur booléenne indiquant à l'utilisateur si la matrice est symétrique ou non (la matrice symétrique est égale à sa transposition). Jusqu'ici j'ai:
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
bien que je continue à recevoir un message axes isn't defined
, je suis donc presque sûr que cela ne fonctionne pas du tout ...... les tests que j'aimerais passer sont les suivants:
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)
Toute aide est la bienvenue, merci!
Vous pouvez simplement utiliser allclose
def check_symmetric(a, tol=1e-8):
return numpy.allclose(a, a.T, atol=tol)
La fonction suivante résout également le problème:
def check_symmetric(a, tol=1e-8):
return not False in (np.abs(a-a.T) < tol)