ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NumPy] Broadcasting
    Python 2022. 1. 23. 16:38
    • general broadcasting rule

     

    꼬리부분의 차원(맨 오른쪽) 부터 시작해 왼쪽방향으로 적용된다.

    각 차원에서 사이즈가 큰것이 적용된다. 

     

    1. 각 차원에서의 사이즈가 같거나

    2. 각 차원에서의 한쪽 배열이 사이즈가 1일때만 적용가능

    (없는 차원의 경우 사이즈 1로 간주할 수 있다)


    • broadcasting 규칙 확인

     

    1. broadcasting 적용 가능 유무, broadcasting 결과 배열의 shape

     

    a= (3 x 4) 

    b= (1 x 1) 

         

    (마지막 꼬리에 해당하는 차원인 열부터) 4, 1 비교 -> 큰 값 4 -> (행) 3,1 비교 -> 큰 값 3 

    broadcasting 결과: 3 x 4


    a = (3 x 4)

    b= (4, ) -> 없는 차원은 비교될 때 1로 간주 (1 x 4)

     

    4, 4 비교 -> 동일 값 4 -> (행) 3,1 비교 -> 큰 값 3

    broadcasting 결과: 3 x 4


    a = (3 x 4)

    b= (3, ) -> (1 x 3)로 간주됨

     

    (마지막 꼬리 열부터) 4, 3 비교 -> 사이즈가 같지 않은데 한쪽이 1이 아니기 때문에 broadcasting이 적용될 수 없다.


    a = 3 x 2 x 4 (3,2,4)

    b =           4 (4,)

    없는 차원은 1로 간주된 뒤 비교

    b = 1 x 4 -> 2 x 4

    없는 차원은 1로 간주된 뒤 비교

    b = 2 x 4 -> 1 x 2 x 4 

     

    broadcasting 결과: 3 x 2 x 4


    a= 1 x 2 x 1 x 7

    b= 3 x 1 x 8 x 1  

     

    broadcasting 결과:  3 x 2 x 8 x 7


    • broadcasting 테스트

     

    # (3,) -> (1 x 3)
    a = np.array([1, 2, 3])
    print(a)
    print()
    # (7 x 1)
    b = np.array([[1],
                  [2],
                  [3],
                  [4],
                  [5],
                  [6],
                  [7]])
    print(b)
    print()
    
    # (7 x 3)
    # a 의 1,2,3이 7개의 행으로 확장
    # b 의 1이 3개의 열로 확장, 2가 3개의 열로 확장 .....7이 3개의 열로 확장
    print(a + b)


    # 2 x 2 x 3
    a = np.array([[[1, 2, 3],
                   [4, 5, 6]],
    
                  [[1, 2, 3],
                   [4, 5, 6]]])
    
    
    # 1 x 3
    b = np.array([[1, 2, 3]])
    
    ''' 2 x 3 
    1 2 3 
    1 2 3 
    ...
    
    ''' 2 x 2 x 3
    1 2 3 
    1 2 3 
    
    1 2 3 
    1 2 3 
    '''
    
    
    # 2 x 2 x 3
    print('a+b')
    print(a + b)


    # 3 x 1 -> 3 x 6
    a = np.array([[1],
                  [2],
                  [3]])
    '''
    1 1 1 1 1 1
    2 2 2 2 2 2
    3 3 3 3 3 3
    '''
    
    # 1 x 6 -> 3 x 6
    b = np.array([[1, 2, 3, 4, 5, 6]])
    
    '''
    1 2 3 4 5 6 
    1 2 3 4 5 6 
    1 2 3 4 5 6
    '''
    
    # 3 x 6
    print('a+b')
    print(a + b)

     

    댓글

Designed by Tistory.