np.set_printoptions()可直接配置打印格式,但参数间相互影响;precision控制总有效位数而非小数位数,需搭配floatmode='fixed'实现固定小数位,suppress=True才真正禁用科学计数法。

直接用 np.set_printoptions() 就能改,不用重写打印逻辑或临时转字符串——但参数之间会互相影响,设错一个就白调。
precision 参数不是“小数点后几位”
precision 控制的是**总有效位数**,不是固定小数位。比如 precision=3 时:0.001234 显示为 0.00123,1234.5 显示为 1.23e+03(除非你同时设 suppress=True)。
- 想看固定小数位(如统一 4 位),得搭配
floatmode='fixed' -
floatmode='fixed'会强制补零,比如1.2变成1.2000,可能掩盖真实精度损失 - 调试数值范围接近的数组(比如梯度更新),
floatmode='fixed'+precision=8更直观
suppress=True 才真禁用科学计数法
默认情况下,只要数组里有极小或极大值(比如 1e-10 或 1e10),NumPy 就自动切科学计数法,哪怕你设了 precision=10 也拦不住。
-
suppress=True强制所有浮点数用定点表示,1e-10变成0.0000000001 - 但注意:如果数值太小(比如
),仍可能显示为 <code>0.,这不是 bug,是 IEEE 754 下的正常行为 - 和
precision搭配用时,先关suppress再调precision,否则看不到效果
threshold 和 linewidth 必须一起调
只设 threshold=np.inf 让数组全显,但没调 linewidth,结果每行只塞两三个数就换行,反而更难读。
立即学习“Python免费学习笔记(深入)”;
-
threshold=np.inf或threshold=sys.maxsize确保不省略元素 -
linewidth=120或更高(尤其在 Jupyter 宽屏环境下),避免频繁换行 - 别用
threshold=0或负数——这会触发意外行为,比如全显示成[...] - 大数组调试时,建议加
edgeitems=5,控制首尾各显示几个,比全显更高效
全局生效 + 不自动还原 = 最容易被忽略的坑
np.set_printoptions() 是全局、永久生效的,Jupyter 里一个 cell 改了,后面所有输出都跟着变——包括你忘了关的 notebook 其他部分。
- 调试完务必还原:
original = np.get_printoptions()→ 调试 →np.set_printoptions(**original) - 更安全的做法是用上下文管理器封装(需自己写,
np不自带),否则容易污染后续分析 -
formatter设了之后不会自动清空,哪怕你只用一次,下次 print 还会走那个 lambda,容易出意料之外的格式



















