본문 바로가기
5-2 . Numpy 제공 자료구조/Array 합치기

[파이썬 numpy] 배열의 축(axis) 이해하기

by 만다린망고 2020. 11. 12.
반응형

[파이썬 numpy] 

배열의 축(axis) 이해하기


배열에는 축이라는 헷갈리는 개념이 있습니다. 특히 concatenate 메소드를 사용하여 배열을 이어붙일때 그렇습니다. 배열의 축이 헷갈리는 이유는 행렬개념에 익숙해져 있기 때문입니다. 차원이 높아지며 우리가 생각하는 행과 열의 순서가 파괴되는 듯한 느낌을 받는데, 이 문제만 해결하면 축은 아주 쉬워집니다. 차원을 높여가며 이해해봅시다.




1차원 배열


먼저 1차원 배열을 하나 정의해봅시다. 


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

>>> A1

array([1, 2, 3, 4, 5])


이때 축은 axis0 하나뿐입니다. 이때는 행과 열의 개념이 없습니다. 여기까지는 어렵지 않습니다.




2차원 배열


이번에는 2차원 배열을 정의해봅시다.


>>> A2=np.arange(6).reshape(2,3)

>>> A2

array([[0, 1, 2],

       [3, 4, 5]])


우리는 위 배열을 2행 3열로 해석을 합니다. 사실 2행3열이라는 것은 우리가 해석하는 방식일 뿐입니다. array는 그냥 list의 중첩입니다. 2차원이니 축이 2개 있습니다. axis0과 axis1입니다. 행과 열에 어떻게 매칭이 될까요? 


axis0 -> 행

axis1 -> 열


왜그럴까요? 이유를 설명할 수 있어야 합니다. axis0은 행, axis1은 열이라고 외워버리면 나중에 문제가 생깁니다. 3차원에서 이 규칙이 유지되지 않기 때문입니다. 이제 이 규칙이 3차원에서 어떻게 깨지는지를 보면서, 헷갈리는 이유를 알아내고 해결해봅시다.




3차원 배열


3차원 배열을 하나 정의해봅시다.


>>> A3=np.arange(24).reshape(2,3,4)

>>> A3 

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


위 배열은 아마 3행 4열의 행렬이 두층 쌓인 것으로 해석될 것입니다. 3차원이므로 축이 3개입니다. 축은 어떻게 대응될까? 행,열,높이라고 한다면 아래와 같이 대응됩니다.


axis0->높이

axis1->행

axis2->열


규칙이 깨집니다. 4차원 이상이 되면 어떨까요? 더이상 행렬개념으로는 이해할 수가 없습니다.




축 개념 이해하기


배열에 대한 생각을 바꿔봅시다. 배열은 단지 리스트의 중첩입니다. 축은 단지 가장 바깥 리스트에서 안쪽리스트 순으로 0부터 이름을 붙인 것입니다.


예를들어


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


라는 배열이 있다고 합시다. 


axis0 은 [1,2,3]->[4,5,6] 로 진행되는 방향입니다. 

axis1 은 1->2->3 또는 4->5->6으로 진행되는 방향입니다. 


axis0을 행방향(위->아래), axis1을 열방항(좌->우)로 해석할 수도 있지만 굳이 그러지 않아도 상관 없습니다. 


차원을 하나 높여봅시다.


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


axis0은 [[1,2],[3,4]] -> [[5,6],[7,8]]로 진행되는 방향입니다.

axis1은 [1,2] -> [3,4] 또는 [5,6] -> [7,8]로 진행되는 방향입니다.

axis2는 1->2 또는 3->4 또는 5->6 또는 7->8로 진행되는 방향입니다.


이런 방식으로 이해한다면 차원이 4차원 이상 높아져도 축 개념을 잡을 수 있습니다. 일종의 축의 '추상화'인것이죠. 행렬개념으로 이해할 경우 4차원 이상에서 축개념을 잡을 수가 없습니다. 


반응형

댓글