转载 Python学习--个人理解numpy的cumsum函数

251 阅读3分钟

来源:blog.csdn.net/yuansuo0516…

C umsum :计算轴向元素累加和,返回由中间结果组成的数组

重点就是返回值是“由中间结果组成的数组

以下代码在python3.6版本运行成功!

下面看代码,定义一个2*2*3的数组,所以其shape是2,2,3,索引分别0,1,2

shape索引
20
21
32

代码:


  

    

     

    

    

     

      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四维矩阵,索引值为0123
   

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开始实现累加,记录中间结果\

**原创解释,禁止复制,支持转载!注明来源
**\


\