检查矩阵在 Numpy 中是否对称

新手上路,请多包涵

我正在尝试使用参数 (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

尽管我不断收到 axes isn't defined 消息,所以我很确定这根本不起作用……我想通过的测试是:

 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)

任何帮助表示赞赏,谢谢!

原文由 plshalp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 946
2 个回答

您可以使用 allclose 将其与其转置进行简单比较

def check_symmetric(a, rtol=1e-05, atol=1e-08):
    return numpy.allclose(a, a.T, rtol=rtol, atol=atol)

原文由 Nils Werner 发布,翻译遵循 CC BY-SA 4.0 许可协议

下面的函数也解决了这个问题:

 def check_symmetric(a, tol=1e-8):
    return np.all(np.abs(a-a.T) < tol)

原文由 Andrés Marulanda 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题