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

numpy输出矩阵时出现0. 异常浮点数显示是什么原因?

NumPy矩阵输出0. 异常显示问题说明

异常本质

你看到的0. 加空白的显示不是计算错误,也不是值为0,是NumPy默认打印规则导致的显示效果:

  • 异常位置的实际值是浮点运算产生的、量级在1e-17~1e-20左右的极小非零数,属于浮点数运算的正常舍入误差
  • NumPy默认打印浮点数统一保留4位小数,这个极小值四舍五入到4位小数为0.0000,为了和同列其他4位长度的数值对齐,NumPy会省略后面的四个0,只显示0. ,视觉上就像缺了一块空白。

产生原因

代码中涉及矩阵转置、L2范数计算、浮点数除法多个浮点运算步骤,浮点数采用二进制存储,本身就存在精度限制,理论上应该为0的位置会产生极其接近0的误差值,这个是所有浮点数计算场景的正常现象,不是代码逻辑bug。

验证方式

你可以通过以下代码查看真实值,确认问题:

# 直接打印异常位置的精确值(注意NumPy索引从0开始,第一列第四行对应索引[3,0])
print(X0[3, 0])

# 调整全局打印配置,输出全矩阵完整精度
np.set_printoptions(precision=20, suppress=False)
print(X0)

运行后就能看到该位置实际是类似8.67e-19这样的极小值。

解决方法

如果不需要保留这类无意义的极小误差,可以在计算完成后加一步阈值过滤,把过小的值直接置为0:

# 绝对值小于1e-10的数值统一判定为0
X0[np.abs(X0) < 1e-10] = 0
print(X0)

处理后再打印矩阵就不会出现异常的0. 显示了。


内容的提问来源于stack exchange,提问作者Đạt Lê

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:06:25