关于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=-3axis=1(中间层行) ↔axis=-2axis=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
相关产品推荐
相关产品推荐

