轉載 Python學習--個人理解numpy的cumsum函式
阿新 • • 發佈:2018-12-25
來源:https://blog.csdn.net/yuansuo0516/article/details/78331568/
C umsum :計算軸向元素累加和,返回由中間結果組成的陣列 重點就是返回值是“由中間結果組成的陣列” 以下程式碼在python3.6版本執行成功! 下面看程式碼,定義一個2*2*3的陣列,所以其shape是2,2,3,索引分別0,1,2shape | 索引 |
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開始實現累加,記錄中間結果
原創解釋,禁止複製,支援轉載!註明來源