how is axis indexed in numpy's array?

后端 未结 4 1255
轮回少年
轮回少年 2020-11-28 18:07

From Numpy\'s tutorial, axis can be indexed with integers, like 0 is for column, 1 is for row, but I don\'t grasp why they are indexed this way? An

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-28 18:35

    In general, axis = 0, means all cells with first dimension varying with each value of 2nd dimension and 3rd dimension and so on

    For example , 2-dimensional array has two corresponding axes: the first running vertically downwards across rows (axis 0), and the second running horizontally across columns (axis 1)

    For 3D, it becomes complex, so, use multiple for loops

    >>> x = np.array([[[ 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]]])
    
    >>> x.shape #(3, 3, 3)
    
    #axis = 0 
    >>> for j in range(0, x.shape[1]):
          for k in range(0, x.shape[2]):
            print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ])
    ...
    element =  (0, 0)   [0, 9, 18]             #sum is 27
    element =  (0, 1)   [1, 10, 19]            #sum is 30
    element =  (0, 2)   [2, 11, 20]
    element =  (1, 0)   [3, 12, 21]
    element =  (1, 1)   [4, 13, 22]
    element =  (1, 2)   [5, 14, 23]
    element =  (2, 0)   [6, 15, 24]
    element =  (2, 1)   [7, 16, 25]
    element =  (2, 2)   [8, 17, 26]
    
    >>> x.sum(axis=0)            
    array([[27, 30, 33],
           [36, 39, 42],
           [45, 48, 51]])
    
    #axis = 1    
    for i in range(0, x.shape[0]):
        for k in range(0, x.shape[2]):
            print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ])
    
    element =  (0, 0)   [0, 3, 6]      #sum is 9 
    element =  (0, 1)   [1, 4, 7]
    element =  (0, 2)   [2, 5, 8]
    element =  (1, 0)   [9, 12, 15]
    element =  (1, 1)   [10, 13, 16]
    element =  (1, 2)   [11, 14, 17]
    element =  (2, 0)   [18, 21, 24]
    element =  (2, 1)   [19, 22, 25]
    element =  (2, 2)   [20, 23, 26]
    
    # for sum, axis is the first keyword, so we may omit it,
    
    >>> x.sum(0), x.sum(1), x.sum(2)
    (array([[27, 30, 33],
            [36, 39, 42],
            [45, 48, 51]]),
     array([[ 9, 12, 15],
            [36, 39, 42],
            [63, 66, 69]]),
     array([[ 3, 12, 21],
            [30, 39, 48],
            [57, 66, 75]]))
    

提交回复
热议问题