python-3.x - 为什么我没有得到单位矩阵?

标签 python-3.x numpy

您好,我想了解此操作后的原因:

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/

相关文章:

python - 如何在 try/except block 中公开变量?

python-3.x - 类型错误 : compile() missing 1 required positional argument: 'self'

python - "a type/class/function/module/... object"的含义?

python - 选择按值加权的行索引

python - 如何拟合一些系数受限的多项式?

python - 从多形状数组的列创建对角矩阵

python - 单独的 open() 是否使文件句柄保持打开状态?

python - 将 DataFrame 中的嵌入字典列表展开为 DataFrame 的新列

python - ODR错误: fcn does not output [n]-shaped array

python - Python中的多元线性回归