Python numpy.cumsum函数详解:一维至多维累计和计算

Ruby
Ruby
发布时间:2026-10-13 | 2人浏览过
原创

本文详细解析Python中numpy库的cumsum函数,通过一维、二维及三维数组示例,深入讲解axis参数在不同维度下的累计求和逻辑,帮助开发者准确掌握多维数据的高效处理技巧。

cumsum函数功能与原型

cumsum函数的核心功能是计算给定axis方向上的累计和。该函数的完整原型定义可参考官方文档。

numpy.cumsum(a, axis=None, dtype=None, out=None) Return the cumulative sum of the elements along a given axis.

官方文档未提供详尽的解释说明,因此通过实际测试整理出以下理解要点。

一维数组的累计求和

1. 当输入a为一维数组时(可以是list或array,例如a=[1, 2, 3, 4, 5, 6, 7]),其逻辑是将当前元素之前的所有值累加到当前元素上,具体表现如下:


>>>import numpy as np
>>> a=[1,2,3,4,5,6,7]
>>> np.cumsum(a)
array([ 1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 75, 105])

二维数组的axis参数处理

2. 当输入a为二维数组时,若设置axis=0(保持第1行不变,将第1行的值累加到后续各行);若设置axis=1(进入最内层,按列处理,保持第1列不变,将第1列的值累加到后续各列),具体表现如下:


>>>import numpy as np
>>> c=[[1,2,3],[4,5,6],[7,8,9]]
>>> np.cumsum(c,axis=0)
array([[ 1, 2, 3],
    [ 5, 7, 9],
    [12, 15, 18]])
>>> np.cumsum(c,axis=1)
array([[ 1, 3, 6],
    [ 4, 9, 15],
    [ 7, 15, 24]])

三维数组的多维累计逻辑

3. 当输入a为三维数组时,若设置axis=0(保持第1行不变,将第1行的值累加到后续各行);若设置axis=1(进入第2层,每个第二层组的第1行保持不变,并累加到同组的后续行);若设置axis=2(进入最内层,按列处理,保持第1列不变,将其累加到后续各列)。需注意维度编号从外到内依次为0至2,具体表现如下:


>>>import numpy as np
>>> a
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 20, 30]]]
>>> np.cumsum(a,axis=0)
array([[[ 1, 2, 3],
    [ 4, 5, 6]],
 
    [[ 8, 10, 12],
    [14, 25, 36]]])
>>> np.cumsum(a,axis=1)
array([[[ 1, 2, 3],
    [ 5, 7, 9]],
 
    [[ 7, 8, 9],
    [17, 28, 39]]])
>>> np.cumsum(a,axis=2)
array([[[ 1, 3, 6],
    [ 4, 9, 15]],
 
    [[ 7, 15, 24],
    [10, 30, 60]]])

假设a是一个2 x 2 x 3的list,直接解释较为复杂,先对a的结构进行风格化拆解。


[ //axis=0
       [//axis=1。同时是axis=0所对应的第 1 行,注意是此中括号包含的整个内容
          [1, 2, 3], //axis=2。同时是 axis=1所对的第1行
          [4, 5, 6] //axis=2
       ],
       [//axis=1。同时是axis=0所对应的第 2行
          [7, 8, 9], //axis=2。同时是 axis=1所对的第1行
          [10, 20, 30] //axis=2
       ],
   ]

三维数组各维度详解

axis=0说明:针对第1维度(包含2行,即绿色中括号内的list),第1行(由1,2,3,4,5,6组成的list)保持不变,将其值累加到第二行,注意此处为累加操作。 axis=1说明:针对第2维度,每个绿色中括号内的第1行保持不变,即[1,2,3]和[7,8,9]不动,将其值累加到同兄弟行(即同属一个中括号的后续行)。 axis=2说明:针对第3维度,即最内层,按列处理,紫色数字所在的列保持不变,将其值累加到其他列上。

高维数组理解方法

对于更高维度的数组,可参考三维的情况,采用从外向内逐层剥离的方式来理解累计求和的过程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表