ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NumPy 강좌 - np.sum 함수에서 axis 의미
    Python/NumPy 2019.11.07 23:06



    NumPy 함수를 사용하다보면 axis 아규먼트를 사용하는 것이 있습니다. 


    어떤 의미일까 고민해보다가 적어봅니다. 



    최초 작성 2019. 11. 7




    넘파이 모듈을 임포트 하고 크기 2 x 3 x 4인 넘파이 배열에 0~23까지 숫자를 채웁니다.  


    >>> import numpy as np
    >>> a = np.arange(24).reshape(2,3,4)




    변수 a를 출력해보면 다음처럼 배열이 출력됩니다. 

    바깥쪽 괄호 [] 부터 시작하여 괄호를 기준으로 차원이 2, 3, 4가 됩니다. 



    가장 바깥쪽 괄호안에 2개의 원소가 존재하며


    >>> a
    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개의 원소가 존재하고 


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




    가장 안쪽 괄호안에는 4개의 원소가 존재한다는 의미입니다. 


    >>> a
    array([[[ 0,  123],
            [ 4567],
            [ 89, 10, 11]],

          [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])




    axis를 명시하지 않으면 배열에 속하는 모든 원소에 대한 합을 구합니다. 


    >>> np.sum(a)
    276




    axis=0이면 첫번째 괄호가 사라졌을 때 남은 2차원 원소가 하나로 더해집니다.

    2차원 배열의 대응하는 원소끼리 더하면 됩니다. 


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

          [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]


    >>> np.sum(a, axis=0)
    array([[12, 14, 16, 18],
          [20, 22, 24, 26],
          [28, 30, 32, 34]])




    axis=1이면 두번째 괄호가 사라지면서 남는 1차원 원소가 하나로 더해집니다. 

    예제에선 위에 3개의 1차원 배열의 대응하는 원소끼리 더해서 하나의 1차원 배열이 되고 

    아래에 3개의 1차원 배열의 대응하는 원소끼리 더해서 하나의 1차원 배열이 됩니다. 


    >>> a
          [ [ 0,  1, 2,  3],
            [ 4,  5, 6,  7],
            [ 8,  9, 10, 11],

            [12, 13, 14, 15],
            [16, 17, 18, 19],
           [20, 21, 22, 23]  ])


    >>> np.sum(a, axis=1)
    array([[12, 15, 18, 21],
          [48, 51, 54, 57]])




    axis=2이면 3번째 괄호가 사라지면서 남는 스칼라 원소가 하나로 더해집니다. 

    예를 들어 0, 1, 2, 3이 모두 더해져서 6이되고  4, 5, 6, 7이 더해져 22가되고 8, 9, 10, 11이 더해져 38이 됩니다. 


    >>> a
    array([[  0,  123 ,
              4567 ,
              89, 10, 11 ],

          [ 12, 13, 14, 15 ,
            16, 17, 18, 19 ,
            20, 21, 22, 23 ]])


    >>> np.sum(a, axis=2)
    array([[ 6, 22, 38],
          [54, 70, 86]])




    axis=(0,1)이면 첫번째, 두번째 괄호가 사라지면서 남는 1차원 배열의 대응하는 원소끼리 더해집니다. 

    예를 들어 0, 4, 8, 12, 16, 20을 더해서 60이 됩니다. 


            [ 0,  123]
            [ 4567]
            [ 89, 10, 11]

            [12, 13, 14, 15]
            [16, 17, 18, 19]
            [20, 21, 22, 23]


    >>> np.sum(a, axis=(0,1))
    array([60, 66, 72, 78])




    axis = (1,2)이면 두번째, 세번째 괄호가 사라지면서 남는 스칼라가 모두 더해집니다. 

    아래 예에서 노란색 숫자들이 모두 더해져서 66이 되며

    초록색 숫자들이 모두 더해져서 210이 됩니다. 


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

          12, 13, 14, 15,
          16, 17, 18, 19,
          20, 21, 22, 23,])



    >>> np.sum(a, axis=(1,2))
    array([ 66, 210])




    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 0

Designed by Tistory.