使用Numpy计算行列式结果与精确值不匹配 相等判断返回false如何解决
问题原因
该问题的核心是浮点数精度误差,具体原因如下:
- Numpy的
linalg.det方法底层采用LU分解等数值计算方法实现,而非直接代入代数公式做精确整数运算,返回结果为浮点数类型 - 受浮点数二进制存储精度限制,你的示例中
b的实际计算结果大概率为-2.0000000000000004或者-1.9999999999999996这类和-2极其接近但不完全相等的数值 - 数值计算场景下直接对浮点数使用
==做严格相等判断本身就是不推荐的做法,很容易因精度误差得到不符合预期的结果
修复方案
- 方案1(通用推荐方案):使用Numpy内置的近似相等判断函数
np.allclose(),该函数会在默认/自定义的容差范围内判断两个数值是否相等,默认容差完全可以覆盖这类计算误差,示例代码:
print(np.allclose(b, -2)) # 输出为True
- 方案2(仅适用于行列式结果确定为整数的场景):先对结果做指定精度的四舍五入后再做相等判断:
print(round(b, 10) == -2) # 保留10位小数后判断,输出为True
内容的提问来源于stack exchange,提问作者ariankazemi
相关产品推荐
相关产品推荐

