转载 Python学习--个人理解numpy的cumsum函数
来源:https://blog.csdn.net/yuansuo0516/article/details/78331568/
Cumsum :计算轴向元素累加和,返回由中间结果组成的数组
重点就是返回值是“由中间结果组成的数组”
以下代码在python3.6版本运行成功!
下面看代码,定义一个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为开始,实现后面的元素累加
四维数组实现
下面看一个四维数组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开始实现累加,记录中间结果
原创解释,禁止复制,支持转载!注明来源

浙公网安备 33010602011771号