ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [numpy] axis 사용법 ( min, max, sum ) 알아보기
    Python 2023. 9. 6. 13:45
    728x90
    반응형

    - 목차

     

    들어가며.

    numpy 의 ndarray 는 min, max, sum 과 같은 내장함수들이 존재합니다.

    그리고 이 함수들은 axis 라는 인자를 가지는데요.

    axis 인자를 활용하여 특정한 Dimension 의 연산을 수행할 수 있습니다.

    예를 들어, 칼럼별 최대값 또는 Row 별 Sum, Count 등을 계산할 수 있죠.

    하지만 axis 인자에 어떤 숫자를 넣어야 하는지 항상 헷갈리는 문제가 있어서 이번 글에서 정리를 하려고 합니다.

     

    먼저 바쁘신 분들을 위해서 기본적인 원리의 설명 이전에 다양한 예시와 결론을 말씀드리려고 합니다.

     

    2차원 Matrix.

    Sum & axis=0.

    2차원 Matrix 에서 sum 함수와 axis=0 연산을 수행해봅니다.

    아래와 같이 axis 가 0 인 경우에는 아래와 같이 연산이 수행됩니다.

    동일한 색상을 가지는 Cell 들이 Sum 연산의 대상이 되는데요.

     

    Sum & axis=0 의 연산 아이디어는 아래와 같습니다.

    1. 먼저 3x3 Matrix 를 axis 0 을 기준으로 3개의 1x3 Matrix 로 분리합니다.

     

    2. 나뉘어진 1x3 Matrix 의 각 같은 위치의 Element 를 Sum 합니다.

    만약 Min & axis=0 의 상황에서는 같은 위치의 Element 들 중에서 Minimum Value 를 찾는 방식으로 동작합니다.

     

     

    max & axis=1.

    이번에는 2차원 Matrix 에서 axis 가 1 인 max 연산을 설명해보도록 하겠습니다.

    먼저 axis 가 1 인 방향을 기준으로 Matrix 를 분리합니다.

    그래서 3x3 Matrix 는 3개의 3x1 Matrix 가 됩니다.

     

     

     

    그리고 동일한 위치의 Element 들 중에서 최대값을 찾습니다.

    즉, axis 로 설정된 Dimension 을 기준으로 Matrix 를 분리하고 동일한 위치의 Element 를 연산하게 됩니다.

     

     

    3차원 Matrix 의 Axis 연산.

    sum & axis=0.

    아래와 같이 2x3x3 Matrix 가 존재합니다.

    matrix = np.array([
        [
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9],
        ],
        [
            [-1, -2, -3],
            [-4, -5, -6],
            [-7, -8, -9],
        ]    
    ])
    matrix.shape
    # (2, 3, 3)

     

     

     

    axis 0 을 기준으로 2x3x3 Matrix 2개의 1x3x3 Matrix 로 분리합니다.

    아래와 같이 2개의 1x3x3 Matrix 로 분리가 되구요.

    동일한 위치의 Element 들을 Sum 한 결과가 Sum & axis=0 의 연산 결과가 됩니다.

     

    아래의 Numpy 연산과 같이 모든 Element 의 값이 0 인 3x3 Matrix 가 생성됩니다.

    matrix.sum(axis=0)
    # array([[0, 0, 0],
    #        [0, 0, 0],
    #        [0, 0, 0]])

     

     

    max & axis=1.

    Max 연산의 인자로써 axis = 1 로 설정하게 된다면, 2x3x3 Matrix 를 3개의 2x1x3 Matrix 로 분리하게 됩니다.

     

    그리고 동일한 위치의 Element 중에서 최대값만을 남기게 됩니다.

    matrix = np.array([
        [
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9],
        ],
        [
            [-1, -2, -3],
            [-4, -5, -6],
            [-7, -8, -9],
        ]    
    ])
    
    matrix.max(axis=1)
    # array([[ 7,  8,  9],
    #        [-1, -2, -3]])

     

     

    정리를 하자면 axis 를 기준으로 Matrix 를 분리하게 되고,

    분리된 Matrix 들 중에서 동일한 Element 를 대상으로 연산을 수행하게 됩니다.

     

     

     

    의미적으로 접근해보기.

    axis 를 기준으로 한 Numpy 연산을 의미적으로 접근해보려고 합니다.

    예를 들어, 아래의 Matrix 는 3명의 학생과 3개의 과목에 대한 설정을 나타냅니다.

     

    학생 별 성적의 총 합을 계산하고 싶다면, Sum & axis=1 를 적용합니다.

    왜냐하면 성적을 기준으로 Matrix 를 분리한 후에 동일한 위치의 Element 를 Sum 해야하기 때문입니다.

     

    성적별 최고 점수를 구하고 싶은 경우에는 Max & axis=0 를 연산해야합니다.

    그 이유는 학생들을 기준으로 Matrix 를 분리한 이후에 각 학생의 점수별 최고 점수를 찾아야하기 때문이죠.

    그래서 3x3 Matrix 는 3 개의 1x3 Matrix 로 분리되며, 분리된 Matrix 들의 동일한 Element 중 최고 점수를 찾아야합니다.

     

     

     

     

    반응형
Designed by Tistory.