You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Numpy中np.sum函数负axis参数含义的技术咨询

搞懂Numpy里的负数axis计数规则

嘿,我来给你把这个事儿讲得明明白白!其实核心就是把数组的轴想象成“从外到内的层级”,正数和负数只是两种不同的数数方式而已。

先拿你测试的2维数组举例:

import numpy as np
t = np.array([[1, 2], [3, 4]])

这个数组可以看成是两层结构:最外层是“行的集合”,内层是每行里的“列元素”。

先搞懂正数axis的含义

  • axis=0:对应最外层的轴,也就是按列相加(把每一列的所有行元素加起来)。你测试的np.sum(t, axis=0)得到array([4, 6]),就是1+3=4,2+4=6,完全符合。
  • axis=1:对应内层的轴,也就是按行相加(把每一行的所有列元素加起来)。np.sum(t, axis=1)得到array([3, 7]),就是1+2=3,3+4=7,这个你应该已经清楚。

再看负数axis的计数逻辑

官方文档说“若axis为负数,则从最后一个轴往第一个轴计数”,翻译成人话就是:

从最内层的轴开始数,最内层的轴是-1,往外层数下一个是-2,以此类推。

对你的2维数组来说:

  • 总共有2个轴,最内层的轴是axis=1,对应负数-1;
  • 倒数第二个(也就是最外层)的轴是axis=0,对应负数-2。

所以你测试的np.sum(t, axis=-2),本质上就是在调用np.sum(t, axis=0),结果自然是array([4, 6]),和axis=0的输出完全一致。

再举个3维数组的例子加深理解

比如我们定义一个3维数组:

arr = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
# 结构是:2个大组 → 每个大组有2行 → 每行有2个元素

它的正数axis和负数axis对应关系是:

  • axis=0(最外层大组) ↔ axis=-3
  • axis=1(中间层行) ↔ axis=-2
  • axis=2(最内层列) ↔ axis=-1

比如执行np.sum(arr, axis=-1),就是按最内层的列相加,结果会是:

array([[3, 7],
       [11, 15]])

和np.sum(arr, axis=2)的结果完全一样。

总结一下核心规律

  • 数组的axis是从外到内分层级的,正数axis从0开始(最外层),依次递增到n-1(最内层,n是数组的维度数);
  • 负数axis是从内到外数,最内层是-1,依次递减到-n(最外层);
  • 每个负数axis都对应一个正数axis:axis=-k 等价于 axis = n - k(n是数组维度数)。

这样是不是就清晰多啦?

内容的提问来源于stack exchange,提问作者NeoZoom.lua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:24:22