본문 바로가기
파이썬/통계분석

[파이썬 강의] 65. 축(axis) 개념 이해하기

by 만다린망고 2021. 10. 22.
반응형

축 개념은 배열에서 자주 사용되는 개념입니다. 축을 행,열,높이 등으로 이해하는 경우가 있는데요. 그렇게 이해하게 되면 차원이 높아질 경우 한계에 부딪히게 됩니다. 

1차원 배열에서는 축이 하나이므로 2차원 부터 생각해봅시다. 2차원 배열을 두개 정의합시다. 

>>> m1=np.array([[1,2,3],[4,5,6]])
>>> m2=np.array([[7,8,9],[10,11,12]])


위 두 배열을 0번 축으로 합칠 경우 아래와 같이 합쳐집니다. 

>>> np.concatenate((m1,m2),axis=0)
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])


1번 축으로 합칠 경우 아래와 같이 합쳐집니다. 

>>> np.concatenate((m1,m2),axis=1)
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])


이때 0번 축을 행방향 결합, 1번 축을 열방향 결합으로 이해하면 안됩니다. 이 규칙은 차원이 높아지면 유지되지 않기 때문입니다. 3차원 배열에서도 이 규칙이 유지되는지 확인해봅시다. 3차원 배열을 두개 정의합시다. 

>>> ar1=np.array([ [[1,2,3],[4,5,6]] , [[7,8,9],[10,11,12]] ])
>>> ar1
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
>>> ar2=np.array([ [[10,20,30],[40,50,60]] , [[70,80,90],[100,110,120]] ])
>>> ar2
array([[[ 10,  20,  30],
        [ 40,  50,  60]],

       [[ 70,  80,  90],
        [100, 110, 120]]])


axis0 방향으로 합쳐봅시다. 

>>> np.concatenate((ar1,ar2),axis=0)
array([[[  1,   2,   3],
        [  4,   5,   6]],

       [[  7,   8,   9],
        [ 10,  11,  12]],

       [[ 10,  20,  30],
        [ 40,  50,  60]],

       [[ 70,  80,  90],
        [100, 110, 120]]])


행방향이 아니라 높이 방향으로 합쳐집니다. "axis=0 은 행방향" 이 성립하지 않습니다. 

axis 개념을 잡아봅시다. 사실 앞에서 이미 배운 shape 함수의 개념과 같습니다. 

axis 개념은 리스트의 중첩입니다. 아래와 같은 배열이 있다고 합시다. 

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

axis0 는 가장 바깥 리스트 기준으로 원소의 방향입니다. 

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

axis1 은 한겹 안에 있는 리스트 기준 원소의 방향입니다. 

1->2->3 또는 4->5->6

실제로 적용해봅시다. 아래 배열을 행렬이라고 생각하지 말고 리스트가 중첩되어 있다고 생각합시다. 

>>> m1=np.array([[1,2,3],[4,5,6]])
>>> m2=np.array([[7,8,9],[10,11,12]])


axis 0는 가장 바깥에 있는 리스트의 원소 방향을 말합니다. ar1을 예로들면 axis0 기준의 원소는 아래와 같은 두 리스트입니다. 

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

ar2에서는 아래 리스트입니다. 

[7,8,9],[10,11,12]

axis0으로 연결한다는 것이 위에 있는 원소들을 연결하는 것을 말합니다. 아래와 같이 됩니다. 

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

이 결과가 행방향 연결로 '해석'되는 것이지 axis0이 행방향은 아닙니다. 

axis 1은 무엇일까요. 가장 바깥에 있는 리스트 보다 하나 안쪽에 있는 리스트를 말합니다. ar1의 원소를 예로 들면 아래와 같습니다. 

1,2,3 또는 4,5,6

ar2에서 같은 위치의 원소는 7,8,9 또는 10,11,12 입니다. 연결한 결과는 아래와 같습니다. 

[1,2,3,7,8,9],[4,5,6,10,11,12]

반응형

댓글