我对使用 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/