Python NumPy中cumsum函数轴向累加详解
本文详解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开始)实现累加,并记录中间结果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









