print(arr) 显示省略号是因为 NumPy 默认启用摘要打印,由 np.get_printoptions() 的 threshold 参数控制,默认 1000 但小数组异常省略常因 threshold 被设低或 Jupyter 干扰;禁用方法是 np.set_printoptions(threshold=np.inf) 或上下文管理器临时生效,并建议配合 linewidth=np.inf 防折行。

为什么 print(arr) 会显示 [1 2 3 ... 98 99 100] 而不是全部数字
NumPy 默认对数组做摘要式打印,避免终端刷屏。这由 np.get_printoptions() 控制,其中 threshold 参数决定“多长就省略”——默认是 1000,但对一维数组,只要元素数 > 1000 就触发省略;而小数组(如 100 元素)本不该省略却出现 ...,往往是 threshold 被意外设得太低,或你正在用 Jupyter(它有自己的显示逻辑,会叠加影响)。
用 np.set_printoptions 彻底禁用省略的三种方式
核心是调大 threshold,但要注意不同场景的写法差异:
- 想永久看到完整数组:运行
np.set_printoptions(threshold=np.inf)——np.inf是最稳妥的值,比设成极大整数(如1000000)更可靠,避免未来数组更大时又出问题 - 只在某次打印时临时生效:用上下文管理器
with np.printoptions(threshold=np.inf): print(arr),退出缩进后自动恢复原设置 - 配合
linewidth防止单行过长折行混乱:加上linewidth=np.inf,尤其对宽二维数组有用;否则即使不省略,也可能因换行导致格式错乱
Jupyter 中 print() 和直接输入变量名行为不一致
Jupyter 对裸变量名(如敲 arr 回车)走的是 IPython 的 rich display 机制,它会读取 np.printoptions,但有时缓存旧设置;而 print(arr) 才严格走 NumPy 原生逻辑。常见现象是:设了 set_printoptions 后 print(arr) 正常了,但直接输 arr 还是省略。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 解决办法:重启 IPython 内核,或执行
from IPython.core.interactiveshell import InteractiveShell; InteractiveShell.instance().display_formatter.formatters['text/plain'].for_type(np.ndarray, lambda arr, **kwargs: str(arr))(不推荐日常用) - 更简单做法:在 notebook 顶部加一行
np.set_printoptions(threshold=np.inf, linewidth=np.inf),并确保它在所有数组操作之前执行 - 注意:Jupyter Lab 3+ 和 Classic 行为略有差异,Lab 默认启用
repr截断,所以必须显式调用set_printoptions
suppress 和 precision 不解决省略问题,但容易混淆
有人误以为打开 suppress=True(关闭科学计数法)或调 precision(控制小数位数)能阻止省略,其实它们和 threshold 完全无关。这两个参数只影响数字怎么写,不影响“写不写全”。
-
suppress=True让0.0001显示为0.0001而非1e-04,但若数组超长,照样省略 -
precision=3把3.14159变成3.142,和是否显示第 1001 个元素毫无关系 - 真正要查省略原因,只盯
threshold和linewidth,其他参数别动
真正麻烦的是嵌套结构——比如 list 里包着多个 np.array,set_printoptions 对它们无效;此时得手动遍历并分别 print,或者用 pprint 配合自定义 formatter。这不是 NumPy 的锅,是 Python 打印协议的边界。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










