1. 程式人生 > >轉載 Python學習--個人理解numpy的cumsum函式

轉載 Python學習--個人理解numpy的cumsum函式

來源:https://blog.csdn.net/yuansuo0516/article/details/78331568/

C umsum :計算軸向元素累加和,返回由中間結果組成的陣列 重點就是返回值是“由中間結果組成的陣列 以下程式碼在python3.6版本執行成功! 下面看程式碼,定義一個2*2*3的陣列,所以其shape是2,2,3,索引分別0,1,2
shape 索引
2 0
2 1
3 2
程式碼:

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

   

    
  1. 輸出結果:
  2. #cumsum(0)
  3. [[[ 1 2 3]
  4. [ 8 9 12]]
  5. [[ 2 4 7]
  6. [10 13 17]]]
  7. #cumsum(1)
  8. [[[ 1 2 3]
  9. [ 9 11 15]]
  10. [[ 1 2 4]
  11. [ 3 6 9]]]
  12. #cumsum(2)
  13. [[[ 1 3 6]
  14. [ 8 17 29]]
  15. [[ 1 3 7]
  16. [ 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
  
  
   
   程式碼:
   
  
  
  

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

    
  1. arr:
  2. [[[[ 0 1 2 3]
  3. [ 4 5 6 7]]
  4. [[ 8 9 10 11]
  5. [ 12 13 14 15]]]
  6. [[[ 16 17 18 19]
  7. [ 20 21 22 23]]
  8. [[ 24 25 26 27]
  9. [ 28 29 30 31]]]]
arr是一個2*2*2*4四維矩陣,索引值為0123
    
cumsum(0):實現0軸上的累加即:以最外面陣列元素為單位即

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

    
  1. [[[ 16 17 18 19]
  2. [ 20 21 22 23]]
  3. [[ 24 25 26 27]
  4. [ 28 29 30 31]]]]
對應位置元素相加起來
結果:

    
  1. [[[[ 0 1 2 3]
  2. [ 4 5 6 7]]
  3. [[ 8 9 10 11]
  4. [ 12 13 14 15]]]
  5. [[[ 16 18 20 22]
  6. [ 24 26 28 30]]
  7. [[ 32 34 36 38]
  8. [ 40 42 44 46]]]]
cumsum(1):實現1軸上的累加即:以次外面元素為單位,累加:

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

    
  1. [[ 8 9 10 11]
  2. [ 12 13 14 15]]

    
  1. [[16 17 18 19]
  2. [20 21 22 23]]

    
  1. [[ 24 25 26 27]
  2. [ 28 29 30 31]]
累計過程產生的中間結果要記錄到陣列中 所以,結果:

    
  1. [[[[ 0 1 2 3]
  2. [ 4 5 6 7]]
  3. [[ 8 10 12 14]
  4. [ 16 18 20 22]]]
  5. [[[ 16 17 18 19]
  6. [ 20 21 22 23]]
  7. [[ 40 42 44 46]
  8. [ 48 50 52 54]]]]
cumsum(2)就對應從[ 0  1  2  3]陣列元素開始實現累加,然後記錄中間結果 cumsum(3)對應的是從最裡面最小的陣列元素,即從0開始實現累加,記錄中間結果
原創解釋,禁止複製,支援轉載!註明來源