我正在尝试使用参数(a,tol = 1e-8)创建一个函数,该函数返回一个布尔值,告诉用户矩阵是否对称(对称矩阵等于其转置).到目前为止我有:
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
虽然我不断得到一个轴没有定义消息,所以我很确定它根本不起作用……我想通过的测试是:
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)
任何帮助表示赞赏,谢谢!
你可以简单地使用allclose
def check_symmetric(a, tol=1e-8): return numpy.allclose(a, a.T, atol=tol)
进群:960410445 即可获取数十套PDF!