您好,我想了解此操作后的原因:
a = np.array([[1, 2], [3, 4]])
ainv = inv(a)
print(np.dot(a,ainv))
我得到:
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
由于我使用的是 a 的逆矩阵,我认为我应该得到:
[[1,0],[0,1]]
所以我希望获得支持以了解结果
最佳答案
a = np.array([[1.0, 2.0], [3.0, 4.0]])
ainv = np.linalg.inv(a) #[[-2.0, 1.0],[1.5, -0.5]]
print(np.dot(a,ainv))
您发现的产量:
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
让我们看看数组元素的类型
type(ainv[1][1])
告诉我们数组的类型是
numpy.float64
让我们看看这种类型的 numpy 精度
numpy.finfo(numpy.float64).precision
Numpy 表示这种 float 精确到的小数位数大约为 15。
15
出于好奇,我们还可以查看机器 epsilon 的类型;
np.finfo(np.float64).eps
这会产生最小的数字 n,其中 1 +n 与 1 无法区分
2.220446049250313e-16
因此,即使您获得的数字在技术上可以与该数据类型的 0 区分开来,但总体精度为 15 位小数,大型矩阵的计算可能会进一步加剧浮点不精确性。
关于python-3.x - 为什么我没有得到单位矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231957/