-
[NumPy] BroadcastingPython 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)
'Python' 카테고리의 다른 글
[Python] list comprehension (0) 2022.01.20 [Python] 클래스 상속과 super()함수의 동작이해 (1) 2022.01.12 [Python] 클래스 기초 (0) 2022.01.11 [Python] False,True 관련 연산자 동작(+None) (0) 2022.01.07 [Python] immutable, mutable 객체 (0) 2022.01.06