cumsum 默认 axis=none 会展平数组再累加得一维结果;axis=0 沿行累加(每列独立),axis=1 沿列累加(每行独立);显式指定 axis 才能保持原 shape,多维同理;out 参数可原地写入但需注意兼容性与内存安全。

cumsum 是 NumPy 里最直接、最高效的累计和计算函数,不用循环、不手动累加,一行就能出结果。
cumsum 默认按行优先展开计算,但实际维度行为取决于 axis 参数
很多人调用 cumsum 后发现结果形状不对,或者数值顺序“怪怪的”,问题常出在没理解默认 axis=None 的行为:
-
axis=None(默认):先把数组展平成一维,再逐元素累加,返回一维结果 -
axis=0:沿行方向累加(对每列独立计算),即“从上到下”累计 -
axis=1:沿列方向累加(对每行独立计算),即“从左到右”累计
例如:np.array([[1, 2], [3, 4]]) 在 axis=0 下结果是 [[1, 2], [4, 6]];而 axis=None 得到 [1, 3, 6, 10] —— 注意这不是按行也不是按列,是先拉成 [1, 2, 3, 4] 再累加。
处理多维数组时,axis 必须显式指定才能保持原始 shape
如果输入是二维数组,又想保留二维结构(比如画图或后续广播运算),就不能依赖默认 axis=None:
- 省略
axis→ 返回一维数组,shape 彻底改变 - 写
axis=0或axis=1→ 输出 shape 与输入一致 - 三维及以上同理,
axis可取0、1、2等,对应各轴
示例:a = np.ones((2, 3, 4)),np.cumsum(a, axis=1).shape 是 (2, 3, 4);若漏写 axis,结果 shape 是 (24,)。
cumsum 返回的是新数组,原地修改需用 out 参数(但慎用)
cumsum 默认不修改原数组,符合 NumPy 多数函数的设计习惯。如需节省内存或复用缓冲区,可用 out 参数:
-
out数组必须 shape 和 dtype 兼容(比如 float 输入不能指向 int 输出) - 常见误用:传入比输入小的
out,会触发ValueError: output array is not acceptable - 更隐蔽的坑:
out若与输入共享内存(如切片),可能引发未定义行为
简单场景推荐直接赋值:result = np.cumsum(arr, axis=1);只有明确压测或内存受限时才考虑 out。
axis 参数不是可选修饰,而是决定语义的关键开关——漏写、错写或凭直觉猜,都会让结果偏离预期,尤其在批量处理不同 shape 的数据时,这个细节最容易被跳过。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











