python-3.x - 为什么 numpy 对这个逆矩阵给出了错误的答案?

标签 python-3.x numpy matrix matrix-multiplication

我对使用 Python 和 numpy 很陌生,由于某种原因,它似乎无法给出这个矩阵逆的正确答案。据我所知,现在只是这个特定的矩阵,当我使用各种不同的随机矩阵时,所有功能都正常。

[[1 2 3]
 [4 5 6]
 [7 8 9]]

这是我的代码:

import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.linalg.inv(a)
print(b)

控制台输出是:

[[ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]
 [-6.30503948e+15  1.26100790e+16 -6.30503948e+15]
 [ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]]

所有大量的数字都是错误的答案。正确答案是:

[[-11/12, 1/3, 1/12],[-1/6,1/3,-1/6,],[3/4,-1/3,1/12]]

此外,如果我尝试确定 np.dot(a,b) 是什么,应该是(四舍五入时):

[[ 1.  0.  0.]
 [-0.  1.  0.]
 [ 0.  0.  1.]]

但我得到:

[[ 0.   1.  -0.5]
 [ 0.   2.  -1. ]
 [ 0.   3.   2.5]]

当我在任何(据我所知,我已经尝试了十几个随机的)其他矩阵集上尝试这些计算时,所有答案都是正确的。我还打开了多个新的 .ipynb 文件,但它仍然无法正常运行。那么这里发生了什么,我该如何修复它/确保它不会以任何其他矩阵集的方式运行?

最佳答案

看起来代码有错误并且矩阵的行列式 = 0,因此它没有逆矩阵。

所以我修改了 3x3 矩阵的 numpy 数组中的最后一个数字(从 9 到 8),这有效。

您需要添加检查才能继续。

检查可能如下所示:

import numpy as np

a = np.array([[1, 2, 3], 
              [4, 5, 6],
              [7, 8, 8]])
det = np.linalg.det(a)
if det == 0:
    print('determinant = 0. there is no inverse.')
else:
    b = np.linalg.inv(a) 
    print(b)

这将返回:

[[-2.66666667  2.66666667 -1.        ]
 [ 3.33333333 -4.33333333  2.        ]
 [-1.          2.         -1.        ]]

除了上述内容之外,如果您添加了与 python (numpy) 生成的内容相比您所期望的逆输出,将会很有帮助......

关于python-3.x - 为什么 numpy 对这个逆矩阵给出了错误的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76725474/

相关文章:

Python 创建一个包含打乱元素并按对象引用的子列表

Python:numpy 数据类型转换

python - 如何展平嵌套元组?

python - Numpy 找到两个二维 ndarray 的协方差

c# - 使用 World 矩阵阵列的 XNA 模型实例化

json - 在 FastAPI 应用程序中将 JSON 转换为 DataFrame

arrays - 用 numpy 和 csv 绘制移动平均线

python - numpy 数组更精确

matrix - 在 NumPy 中增加矩阵

python - 将对角矩阵提高到负幂 1/2