Python numpy.cumsum函数详解:一维至多维累计和计算
本文详细解析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维度,即最内层,按列处理,紫色数字所在的列保持不变,将其值累加到其他列上。
高维数组理解方法
对于更高维度的数组,可参考三维的情况,采用从外向内逐层剥离的方式来理解累计求和的过程。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













