axis(축) 이해

반응형
    반응형

    axis(축)에 대해 이야기해볼까 합니다.

    축의 원리는 다 비슷하기 때문에 한번 알아두면 벡터형식의 배열을 다루는데 큰 도움이 됩니다.

    함수를 그릴려면 2차원은 x,y축을 그렸었고 3차원은 x,y,z축을 그립니다.

     

    위 그림처럼 그렸었는데 numpy에서는 x축을 axis=0, y축을 axis=1,z축을 axis=2로 여깁니다.

    그렇지만 ndarray는 그림처럼 축으로 나눠지는 그래프가 아니고,

    벡터와 행렬형식의 배열이기 때문에 축을 어떻게 여기는가가 관건입니다.

    ndarray에서는 x축이 row 기준,y축은 column기준,z해 이야기해볼까 합니다.

     

     

    축의 원리는 다 비슷하기 때문에 한번 알아두면 벡터형식의 배열을 다루는데 큰 도움이 됩니다.

    함수 그래프에서는 axis의 번호를 붙이지 않았지만 numpy에서는 x축을 axis=0, y축을 axis=1,z축을 axis=2로 여깁니다.

    즉, x축이 row 기준 ,y축은 column기준, z축은 depth기준입니다.

     

    예를 보겠습니다.

    import numpy as np
    a= np.arange(36).reshape(3,3,4)
    print(a)
    

    먼저 axis 없이 더하면 모든 원소를 다 더합니다.

    np.sum(a)

     

    axis=0

    np.sum(a,axis=0)

    x축을 기준(row정렬)으로 더하는 것을 볼 수 있습니다. 정리해서 보면 다음과 같은 덧셈을 하는 것을 볼 수 있습니다.

    인덱스별로 row로 묶은 후 각각 더합니다. (3,3,4) 배열에서 앞의 3을 fix하고 더했으므로 배열은 (3,4)이 됩니다.

     

     

    axis=1

    np.sum(x,axis=1)

    이번엔 column이 기준이므로 더해지는 것을 볼 수 있습니다. 마찬가지로 배열의 두번째 3이 fix 됐으므로 배열은 (3,4)이 됩니다.

    행렬을 인덱스별로 축위에 배열을 하면 위의 그림과 같은 모양이 됩니다. 거기서 x축, y축 방향으로 더해 나가는 것을 그림을 보면서 이해하시기 바랍니다.

     

    axis= 2

    np.sum(a,axis=2)

    axis=2로 덧셈을 하면 각 인덱스별의 row별로 덧셈을 합니다. 그래서 6은 0+1+2+3 , 22 = 4+5+6+7  이런식으로 인덱스의 row별로 더한걸 옆으로 나열합니다. 배열은 (3,3,4)에서 4를 fix 했으므로 (3,3)배열이 됩니다.

     

    axis=(0,1)

    이번엔 두 축을 한꺼번에 고정하고 계산을 해보겠습니다.

     

    np.sum(a,axis=(0,1))

    계산을 두번 했다 여기시면 이해가 빠릅니다. 

    axis=0을 먼저 계산한것으로 여기면 다음이 나옵니다. 이 행렬은 row 기준으로 덧셈을 했으니 axis=(0,1)로 계산을 하려면 axis=1 부분이 남아있습니다. 그래서 행렬에서 column 계산을 하면 위와 같은 (4,)배열이 나오게 됩니다. 

    즉, 144 = 12+48+84 로 column 계산이 일어납니다.


    여기까지 축에 대한 간략한 설명을 했습니다. 축은 원리만 이해하시면 금방 다루실 수 있습니다. 

    'Python > Numpy' 카테고리의 다른 글

    [Numpy] Bool 이용하기  (4) 2020.06.02
    [Numpy] Broadcasting(브로드캐스팅)  (2) 2020.05.27
    [Numpy] 연산,통계,집계함수  (2) 2020.05.21
    Reshape  (0) 2020.05.19
    ndarray 인덱싱,슬라이싱  (0) 2020.05.17

    댓글

    Designed by JB FACTORY

    ....