[python] 축은 numpy의 배열에서 어떻게 인덱싱됩니까?

에서 NumPy와의 튜토리얼 처럼 축, 정수로 색인 할 수있다 0, 열위한 1행이지만, 그들은 이런 식으로 색인을 왜 이해하지? 그리고 다차원 배열에 대처할 때 각 축의 인덱스를 어떻게 알 수 있습니까?



답변

정의에 따라 차원의 축 번호는 배열의 shape. 인덱싱 중에 해당 차원에 액세스하는 데 사용되는 위치이기도합니다.

예를 들어 2D 배열의 a모양이 (5,6)이면 a[0,0]최대 a[4,5]. 따라서 축 0은 첫 번째 차원 ( “행”)이고 축 1은 두 번째 차원 ( “열”)입니다. “행”과 “열”이 실제로 의미가없는 더 높은 차원에서는 관련된 모양과 인덱스 측면에서 축을 생각하십시오.

.sum(axis=n)예를 들어 를 수행하면 차원 n이 축소되고 삭제되며 새 행렬의 각 값은 해당 축소 된 값의 합계와 동일합니다. 예를 들어, bshape (5,6,7,8)가 있고 그렇게 c = b.sum(axis=2)하면 축 2 (크기가 7 인 차원)가 축소되고 결과는 shape가 (5,6,8)됩니다. 또한 c[x,y,z]모든 요소의 합과 같습니다 b[x,y,:,z].


답변

누구나이 시각적 설명이 필요한 경우 :

Numpy 배열 축 0 및 1


답변

다음과 같이 축을 잡을 수 있습니다.

>>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]])
array([[[1, 2, 3],
    [2, 2, 3]],

   [[2, 4, 5],
    [1, 3, 6]],

   [[1, 2, 4],
    [2, 3, 4]],

   [[1, 2, 4],
    [1, 2, 6]]])
>>> a.shape
(4,2,3)

(4,2,3)구조를 명확하게 알 수 있도록 값이 다른 모양의 배열을 만들었습니다 . 다른 축은 다른 ‘레이어’를 의미합니다.

즉, axis = 0shape의 첫 번째 차원을 색인화합니다 (4,2,3). 첫 번째의 배열을 참조합니다 []. 4 개의 요소가 있으므로 모양은 4입니다.

  array[[1, 2, 3],
        [2, 2, 3]],

  array[[2, 4, 5],
        [1, 3, 6]],

  array[[1, 2, 4],
        [2, 3, 4]],

  array[[1, 2, 4],
        [1, 2, 6]]

axis = 1모양에서 두 번째 차원을 색인화합니다 (4,2,3). 레이어의 각 배열에는 2 개의 요소가 있습니다. axis = 0, ec

 array[[1, 2, 3],
       [2, 2, 3]]

. 두 가지 요소는 다음과 같습니다.

array[1, 2, 3]

array[2, 2, 3]

세 번째 모양 값은 레이어의 각 배열 요소에 3 개의 요소가 있음을 의미합니다 : axis = 2. ec에는 3 개의 요소가 array[1, 2, 3]있습니다. 그것은 명백합니다.

또한 []시작 또는 끝 의 숫자에서 축 / 치수를 알 수 있습니다 . 이 경우 숫자는 3 ( [[[)이므로 , 및 axis에서 선택할 수 있습니다 .axis = 0axis = 1axis = 2


답변

일반적으로 axis = 0은 2 차원 및 3 차원의 각 값에 따라 달라지는 첫 번째 차원이있는 모든 셀을 의미합니다.

예를 들어, 2 차원 배열에는 두 개의 해당 축이 있습니다. 첫 번째 축은 행을 가로 질러 수직으로 아래쪽으로 이동하고 (축 0) 두 번째 축은 열을 가로 질러 가로로 이동합니다 (축 1).

3D의 경우 복잡해 지므로 여러 for 루프를 사용하십시오.

>>> 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]]))


답변