Python NumPy中cumsum函数轴向累加详解

拾光
拾光
发布时间:2026-10-13 | 6人浏览过
原创

本文详解Python NumPy库中cumsum函数的用法。cumsum用于计算数组沿指定轴的累加和,返回值为由中间结果组成的数组。文章通过2*2*3三维数组和2*2*2*4四维数组的具体代码示例,分别演示了cumsum(0)、cumsum(1)、cumsum(2)及cumsum(3)在不同轴向上的累加逻辑与输出结果,帮助读者理解多维数组的轴向累加机制。

cumsum函数基本概念

cumsum函数用于计算数组沿指定轴向元素的累加和,其返回值是一个由中间累加结果组成的新数组。

理解cumsum的核心在于明确其返回值并非最终单一数值,而是包含每一步累加过程的中间结果数组。

以下示例代码已在Python 3.6版本环境中验证通过。

三维数组cumsum示例

首先定义一个形状为2*2*3的二维数组(实际为三维结构,shape为(2, 2, 3)),其索引维度分别为0、1、2。

shape 索引
2 0
2 1
3 2

具体实现代码如下:


import numpy as np
arr = np.array([[[1,2,3],[8,9,12]],[[1,2,4],[2,4,5]]]) #2*2*3
print(arr.cumsum(0))
print(arr.cumsum(1))
print(arr.cumsum(2))

运行上述代码后,得到如下输出结果:

#cumsum(0) [[[ 1 2 3] [ 8 9 12]] [[ 2 4 7] [10 13 17]]] #cumsum(1) [[[ 1 2 3] [ 9 11 15]] [[ 1 2 4] [ 3 6 9]]] #cumsum(2) [[[ 1 3 6] [ 8 17 29]] [[ 1 3 7] [ 2 6 11]]]

对输出结果进行详细注释说明:

  • arr是一个形状为2*2*3的三维矩阵,其三个维度的索引值依次为0、1、2。
  • cumsum(0):表示沿第0轴进行累加。以最外层的数组元素为单位,以[[1,2,3],[8,9,12]]为起始,将后续对应位置的元素依次累加。
  • cumsum(1):表示沿第1轴进行累加。以中间层的数组元素为单位,以[1,2,3]为起始,将后续对应位置的元素依次累加。
  • cumsum(2):表示沿第2轴进行累加。以最内层的单个元素为累加单位,从1开始,将后续元素依次累加。

四维数组cumsum示例

接下来展示四维数组的cumsum实现方式。

下面看一个形状为2*2*2*4的四维数组,其索引维度依次为0、1、2、3。


import numpy as np
arr = np.arange(32).reshape((2,2,2,4))
print(arr)
print(arr.cumsum(0))
print(arr.cumsum(1))
print(arr.cumsum(2))
print(arr.cumsum(3))

arr:
[[[[ 0 1 2 3]
  [ 4 5 6 7]]
 
 [[ 8 9 10 11]
  [12 13 14 15]]]
 
 
 [[[16 17 18 19]
  [20 21 22 23]]
 
 [[24 25 26 27]
  [28 29 30 31]]]]

arr是一个形状为2*2*2*4的四维矩阵,其四个维度的索引值依次为0、1、2、3。

cumsum(0):实现沿第0轴的累加,即以最外层的数组元素为单位进行计算。


[[[ 0 1 2 3]
  [ 4 5 6 7]]
 
 [[ 8 9 10 11]
  [12 13 14 15]]]

与


[[[16 17 18 19]
  [20 21 22 23]]
 
 [[24 25 26 27]
  [28 29 30 31]]]]

对应位置的元素相加。

最终计算结果如下:


[[[[ 0 1 2 3]
  [ 4 5 6 7]]
 
 [[ 8 9 10 11]
  [12 13 14 15]]]
 
 
 [[[16 18 20 22]
  [24 26 28 30]]
 
 [[32 34 36 38]
  [40 42 44 46]]]]

cumsum(1):实现沿第1轴的累加,即以次外层的数组元素为单位进行累加。


[[ 0 1 2 3]
  [ 4 5 6 7]]

加


 [[ 8 9 10 11]
  [12 13 14 15]]

加


[[16 17 18 19]
  [20 21 22 23]]

加


[[24 25 26 27]
  [28 29 30 31]]

在累计过程中产生的所有中间结果均需记录在数组中。

因此,最终输出结果为:


[[[[ 0 1 2 3]
  [ 4 5 6 7]]
 
 [[ 8 10 12 14]     
  [16 18 20 22]]]
 
 
 [[[16 17 18 19]
  [20 21 22 23]]
 
 [[40 42 44 46]
  [48 50 52 54]]]]

cumsum(2)对应从[0, 1, 2, 3]这样的数组元素开始实现累加,并记录每一步的中间结果。

cumsum(3)对应从最内层的最小数组元素(即从0开始)实现累加,并记录中间结果。

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

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表