You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么numpy的np.linalg.inv求矩阵逆会得到两个接近但有差异的结果?

两个逆矩阵结果存在微小差异的原因

这是浮点数运算的舍入误差累积导致的正常数值计算现象:

  • 两种计算方式的运算路径完全不同:res1需要依次完成m.T * m矩阵乘法、乘积矩阵求逆、再和m.T做矩阵乘法三步运算,每一步双精度浮点数运算都会引入极微小的舍入误差,三步误差累计后就和直接对m单步求逆得到的res2产生了差异。
  • 你观察到的差值在1e-14量级,完全属于双精度浮点数运算的正常误差范围,本身不会影响绝大多数场景的使用效果。
结果选择建议及与cv2输出对齐的原因
  • 如果你需要和cv2.getPerspectiveTransform的输出严格对齐,优先选择res1。
    原因是OpenCV求解透视变换矩阵的底层逻辑就是基于正规方程的最小二乘求解:对于求解Ax = b的问题,正规方程的解析解为x = (A.T @ A)^{-1} @ A.T @ b,和你计算res1的表达式逻辑完全一致,所以res1的结果自然会和cv2的输出匹配。
  • 如果你只是单纯需要计算满秩方阵的逆矩阵,优先选择res2。
    直接求逆的计算步骤更少,误差累积更少,数值稳定性更好。res1的计算逻辑本质是求解非方阵的左伪逆,多用于超定方程的最小二乘求解,用在满秩方阵求逆的场景属于冗余计算,反而会引入额外的误差。
  • 补充说明:两种结果的差值远小于图像变换、通用数值计算的精度要求,无对齐需求时两者的实际使用效果几乎没有区别。

内容的提问来源于stack exchange,提问作者yokus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:24:08