[numpy #3] Broad casting에 대해서 알아보자
2019. 4. 17. 10:57ㆍProgramming Tutorial/Python
필자가 궁금한 순으로 공부하고 남기는 것이므로 순서가 뒤죽박죽일순 있다.
각설하고 시작하자.
Numpy는 차원/모양이 다른 array간의 산술연산을 할때 broad casting이라는 mechanism을 사용한다.
일단 개념적으로 예를 한번들어보자.
[2,4,6,8] 이라는 4개 원소를 가지는 array와 scalar 2를 곱하는 과정을 개념화한 아래의 그림을 참고하면
쉽게 broad casting에 대해서 이해할수 있다.
Figure 1: Broadcasting example of adding a scalar to a vector (or 1-D array)
array와 scalar 연산 뿐만 아니라 matrix간의 연산에도 해당 내용은 확장되어 적용된다.
다만 모든경우에 broad casting이 가능한 것은 아니다.
Trailing axes 사이즈가 일치하거나 연산 대상중 하나가 1이어야 한다.
Figure 2: Matrix broadcasting example
이제 코드로 예시를 한번 뜯어봅시다.
# create a 4 X 3 matrix of random integers between 1 and 10
> A = np.random.randint(1, 10, [4, 3])
> A
'Output':
array([[9, 9, 5],
[8, 2, 8],
[6, 3, 1],
[5, 1, 4]])
# create a 4 X 1 matrix of random integers between 1 and 10
> B = np.random.randint(1, 10, [4, 1])
> B
'Output':
array([[1],
[3],
[9],
[8]])
# add A and B
> A + B
'Output':
array([[10, 10, 6],
[11, 5, 11],
[15, 12, 10],
[13, 9, 12]])
위와는 다르게 broad casting 조건을 만족하지 않는다면. error를 출력합니다.
아래를 봅시다.
A (2d array): 4 x 3
B (2d array): 4 x 2
The dimensions do not match - they must be either the same or 1
> A = np.random.randint(1, 10, [4, 3])
> B = np.random.randint(1, 10, [4, 2])
> A + B
'Output':
Traceback (most recent call last):
File "<ipython-input-145-624e41e41a31>", line 1, in <module>
A + B
ValueError: operands could not be broadcast together with shapes (4,3) (4,2)
머신러닝 공부시 해당 개념 이해가 꽤 도움이 될듯 합니다.
자 오늘도 커피한잔 마시면서.. 마무리하죠.
'Programming Tutorial > Python' 카테고리의 다른 글
[numpy #5] 열벡터를 만들어 봅시다. Making column vector (0) | 2019.06.05 |
---|---|
[파이썬] string 자료형의 Punctuation 없애는 방법 (0) | 2019.05.15 |
[pandas#1] Data는 정리하고 청소하는 것부터... (0) | 2019.04.05 |
[numpy #2] numpy의 기초에 대해서 알아보자! (0) | 2019.04.04 |
[numpy #1] "numpy.newaxis"는 무엇이고 언제사용하는가 (4) | 2019.04.02 |