登录
首页 >  文章 >  python教程

NumPy数组行列求和方法详解

时间:2026-04-09 18:33:34 343浏览 收藏

掌握NumPy数组求和的关键在于真正理解axis参数的本质:它指定的是“要压缩掉的维度”,而非简单对应“行或列”;axis=0压缩行方向实现按列求和,axis=1压缩列方向实现按行求和,负轴(如-1)则安全指向最后一维,避免越界错误;默认sum()会降维导致shape不匹配,需用keepdims=True保留维度以支持广播;面对含nan的真实数据,务必改用nansum跳过缺失值——它甚至对全nan序列返回0.0,行为稳定可靠;高维操作时,先查ndim、善用负轴、动手验算shape,能大幅减少后续reshape与broadcasting的连锁bug。

Python怎么对NumPy数组进行行列求和_利用axis参数控制聚合维度

axis=0 是按列求和,不是按行

很多人看到 axis 就默认“0=行、1=列”,结果一用就错。NumPy 的 axis 指的是“要压缩掉的维度”:设 a.shape == (3, 4)a.sum(axis=0) 会把第 0 维(即行方向)压掉,剩下形状为 (4,) —— 也就是每列加总,得到 4 个数。

  • a.sum(axis=0) → 结果长度 = 原数组列数,每个值是该列所有元素之和
  • a.sum(axis=1) → 结果长度 = 原数组行数,每个值是该行所有元素之和
  • 三维数组如 a.shape == (2, 3, 4)axis=1 表示沿中间那维求和,结果为 (2, 4)

sum() 默认对全部元素求和,不保留维度

直接写 a.sum() 得到一个标量,不是数组。如果后续要广播或拼接,这个行为常导致 shape 不匹配。

  • 想保持维度(比如让结果仍是二维,只是某维长度为 1),得加 keepdims=True
  • a.sum(axis=0, keepdims=True) 返回形状为 (1, 4) 的二维数组,不是 (4,)
  • 省略 keepdims 时,NumPy 会“降维”,这是设计使然,不是 bug

遇到 nan 数据,sum() 默认结果是 nan

只要参与求和的切片里有一个 nannp.sum() 就返回 nan,哪怕其他全是数字。这在处理真实数据时非常容易踩坑。

  • np.nansum() 替代 — 它自动跳过 nan,把其余数加起来
  • np.nansum(a, axis=1) 对每行求和,该行有 nan 不影响其他行结果
  • 注意:np.nansum([np.nan, np.nan]) 返回 0.0,不是 nan,这点和 np.nanmean() 行为不同

高维数组用 axis 要小心索引越界

传入不存在的 axis 值,比如 a.shape == (5, 6) 却写 a.sum(axis=2),会报 numpy.AxisError: axis 2 is out of bounds for array of dimension 2

  • 可用 a.ndim 先查维度数,合法 axis 只能是 0a.ndim - 1(含)
  • 负轴如 axis=-1 表示最后一维,安全些;axis=-1 在二维里等价于 axis=1,在三维里等价于 axis=2
  • 循环处理多个 axis 时,别硬写死数字,优先用 -1-2 这类相对索引

axis 的语义和维度压缩逻辑一旦记混,后续 reshape、broadcasting 都会连锁出错。最稳妥的方式是每次用前 print 一下 shape,再手算一遍压缩后该剩几个维度——这点花十秒,比 debug 十分钟强。

到这里,我们也就讲完了《NumPy数组行列求和方法详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>