dev.to | 📄 原文链接 | 2026-10-18 收录

Python 性能:原生循环、NumPy,与 np.vectorize 的陷阱

来源:dev.to — 2026-10-16

📋 概述

作者用 y = x*x + x 这个逐元素运算做基准,在 CPython 3.10.12 + NumPy 2.2.6 + Numba 0.67.0、i9-13900HX 单核绑定的环境里,对每种实现做十一轮预热计时、打乱顺序、校验全部结果。结论比「用 NumPy」细得多:如果输入输出本来就能保持数组形态,NumPy 的编译实现提升巨大,因为省掉了逐元素的解释器与对象操作;一旦调用方要求进 Python 列表、出 Python 列表,这份优势几乎被转换数据的开销吃干净。小输入反而列表推导更快;Numba 预热后很快,但首次编译是额外成本;最诱人的 np.vectorize 只是给 Python 函数套了个数组外观,内部依然逐元素调用。

🔑 核心要点

💡 金句

“You can keep the calculation unchanged, move its repeated execution into a native operation, and finish much sooner on the same CPU. You can also spend the entire gain converting the data around that operation.”
译:你可以不改计算、只把重复执行搬进原生操作,在同一颗 CPU 上快很多;但你也可能把全部收益都花在给这个操作转换数据上。
← 返回 dev.to 首页