美文网首页我爱编程
numpy中axis参数说明

numpy中axis参数说明

作者: yoshino | 来源:发表于2018-07-24 15:25 被阅读73次

    axis=i,即沿着数组第i个下标的变化方向进行操作。
    这里我们用numpy.sum(axis=i)进行说明

    举例说明:

    k = np.reshape(np.arange(24), [3, 2, 4])
    print(k)
    
    [[[ 0  1  2  3]
      [ 4  5  6  7]]
    
     [[ 8  9 10 11]
      [12 13 14 15]]
    
     [[16 17 18 19]
      [20 21 22 23]]]
    

    这是一个(3,2,4)维的矩阵,那么对于每个元素,均可用3个下标i,j,k表示,如:

    k[i][j][k]
    k[0][0][0]=0
    k[0][0][3]=3
    k[0][1][0]=4
    k[1][0][0]=8
    k[2][1][3]=23
    # 坐标轴的取值范围
    i={0,1,2}
    j={0,1}
    k={0,1,2,3}
    

    求和操作是降维操作,k有三个轴,分别按照这三个轴进行求和

    axis=0

    axis=0,即沿着第0个坐标i下标变化的方向进行求和,第0轴降维,得到的shape=(2,4)

    print(k.sum(axis=0))
    print(k.sum(axis=0).shape)
    
    [[24 27 30 33]
     [36 39 42 45]]
    (2, 4)
    

    下面我们进行手算,沿着第0个坐标遍历求和:

    # 沿着第三个坐标 k=0,1,2,3,再沿着第二个坐标j=0,1,共计算8次
    # 坐标轴的取值范围
    # i={0,1,2}
    # j={0,1}
    # k={0,1,2,3}
    
    k[0][0][0]+k[1][0][0]+k[2][0][0]=24
    k[0][0][1]+k[1][0][1]+k[2][0][1]=27
    k[0][0][2]+k[1][0][2]+k[2][0][2]=30
    k[0][0][3]+k[1][0][3]+k[2][0][3]=33
    
    k[0][1][0]+k[1][1][0]+k[2][1][0]=36
    k[0][1][1]+k[1][1][1]+k[2][1][1]=39
    k[0][1][2]+k[1][1][2]+k[2][1][2]=42
    k[0][1][3]+k[1][1][3]+k[2][1][3]=45
    
    sum = np.reshape(np.array([24, 27, 30, 33, 36, 39, 42, 45]), (2, 4))
    sum = array([[24, 27, 30, 33],
                 [36, 39, 42, 45]])
    

    axis=1

    axis=1,即沿着第1个坐标下标j变化的方向进行求和,第1轴降维,得到的shape=(3,4)

    print(k.sum(axis=1))
    print(k.sum(axis=1).shape)
    
    [[ 4  6  8 10]
     [20 22 24 26]
     [36 38 40 42]]
    (3, 4)
    
    

    这时,我们沿着第1个坐标j进行手动求和:

    # 坐标轴的取值范围
    # i={0,1,2}
    # j={0,1}
    # k={0,1,2,3}
    
    k[0][0][0]+k[0][1][0]=4
    k[0][0][1]+k[0][1][1]=6
    k[0][0][2]+k[0][1][2]=8
    k[0][0][3]+k[0][1][3]=10
    
    k[1][0][0]+k[1][1][0]=20
    k[1][0][1]+k[1][1][1]=22
    k[1][0][2]+k[1][1][2]=24
    k[1][0][3]+k[1][1][3]=26
    
    k[2][0][0]+k[2][1][0]=36
    k[2][0][1]+k[2][1][1]=38
    k[2][0][2]+k[2][1][2]=40
    k[2][0][3]+k[2][1][3]=42
    
    sum = np.reshape(np.array([4, 6, 8, 10, 20, 22, 24, 26, 36, 38, 40, 42]), (3, 4))
    sum = array([[ 4,  6,  8, 10],
                 [20, 22, 24, 26],
                 [36, 38, 40, 42]])
    

    axis=2

    axis=2,即沿着第2个坐标下标k变化的方向进行求和,第2轴降维,得到的shape=(3,2)

    print(k.sum(axis=2))
    print(k.sum(axis=2).shape)
    
    [[ 6 22]
     [38 54]
     [70 86]]
    (3, 2)
    

    还是一样的,我们沿着k坐标的变化进行计算:

    # 坐标轴的取值范围
    # i={0,1,2}
    # j={0,1}
    # k={0,1,2,3}
    
    k[0][0][0]+k[0][0][1]+k[0][0][2]+k[0][0][3]=6
    k[0][1][0]+k[0][1][1]+k[0][1][2]+k[0][1][3]=22
    
    k[1][0][0]+k[1][0][1]+k[1][0][2]+k[1][0][3]=38
    k[1][1][0]+k[1][1][1]+k[1][1][2]+k[1][1][3]=54
    
    k[2][0][0]+k[2][0][1]+k[2][0][2]+k[2][0][3]=70
    k[2][1][0]+k[2][1][1]+k[2][1][2]+k[2][1][3]=86
    
    sum = np.reshape(np.array([6, 22, 38, 54, 70, 86]), (3, 2))
    sum = array([[ 6, 22],
                 [38, 54],
                 [70, 86]])
    

    相关文章

      网友评论

        本文标题:numpy中axis参数说明

        本文链接:https://www.haomeiwen.com/subject/stxymftx.html