gpt4 book ai didi

python - 对称矩阵及其转置的逻辑比较

转载 作者:行者123 更新时间:2023-11-28 16:56:45 26 4
gpt4 key购买 nike

我试图通过数值测试矩阵及其转置的乘法是否真的生成对称方阵。

下面是我使用的代码:

mat = np.array([[1,2,3],[1,0,1],[1,1,1],[2,3,5]])
mat2 = np.linalg.inv(np.matmul(np.transpose(mat),mat))
mat2
array([[ 1.42857143, 0.42857143, -0.85714286],
[ 0.42857143, 1.92857143, -1.35714286],
[-0.85714286, -1.35714286, 1.21428571]])

mat2 似乎是对称的。

然而,下面代码的结果让我感到困惑:

np.transpose(mat2) == mat2
array([[ True, False, False],
[False, True, False],
[False, False, True]])

但是当我用mat做同样的程序时,结果如我所料:

np.transpose(np.matmul(np.transpose(mat),mat)) == np.matmul(np.transpose(mat),mat)
array([[ True, True, True],
[ True, True, True],
[ True, True, True]])

这与计算问题有关吗?如果那样,我如何证明非对角线元素相同?

最佳答案

比较 matmat.T,您是在比较整数和整数,没有问题。

mat2 是 float ,容易出现细微错误。当您打印出 mat2 时,您看到的是完整数字的截断版本。查看 mat2mat2.T 之间的区别:

>>> mat2 - mat2.T
array([[ 0.00000000e+00, 1.11022302e-16, -1.11022302e-16],
[-1.11022302e-16, 0.00000000e+00, 2.22044605e-16],
[ 1.11022302e-16, -2.22044605e-16, 0.00000000e+00]])

差异在 0.0000000000000001 的数量级上,这意味着它们“对于所有意图和目的”都是相等的,但并不完全相等。从这里有两个地方可以去。您可以接受数值精度是有限的,并使用类似 numpy.allclose 的东西来进行相等性测试,这允许一些小错误:

>>> np.allclose(mat2, mat2.T)
True

或者,如果你真的坚持你的矩阵是对称的,你可以用这样的东西来强制它:

>>> mat3 = (mat2 + mat2.T)/2
>>> mat3 == mat3.T
array([[ True, True, True],
[ True, True, True],
[ True, True, True]])

关于python - 对称矩阵及其转置的逻辑比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57694922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com