728x90
Numpy를 활용한 배열 연산
- numpy는 python에서 텐서 연산을 효율적으로 수행할 수 있도록 해주는 라이브러리
- 수학적으로 벡터의 요소별 연산을 할 때, 텐서의 shape이 일치하지 않으면 계산할 수 없음
- 예를 들어, $x = [1, 2, 3]$인 3차원 벡터의 각 요소에 1씩 더해주려면
x + np.array([1,1,1])
처럼 계산 - 하지만 numpy에서는 배열의 형태가 달라도 의도한 계산을 할 수 있는 broadcasting을 지원하기 때문에
x + 1
로 같은 결과를 얻음
- 2차원 배열에서도 다음과 같이 broadcasting이 적용된 연산을 할 수 있음.
Broadcasting rule
- 위의 예시에서는 낮은 차원의 예시이기 때문에 쉽게 이해하고 적용할 수 있지만, 차원이 높아짐에 따라 규칙을 명확하게 이해하기 어려워짐
- 두 가지 규칙을 기억하고 적용하면 broadcasting을 적용할 수 있음
- 마지막 shape에 맞게 정렬
- 비어있는 axis나, 값이 1인 axis의 차원이 바뀐다.
Example
- 아래 그림은 broadcasting을 통해 3차원 텐서와 2차원 텐서의 연산을 수행하는 과정을 보임
- 차원이 낮은 Tensor 2(2차원)이 Tensor 3(3차원)의 shape에 맞추어 계산됨
- 아래 그림처럼 규칙에 맞게 마지막 axis를 맞게 정렬하면 노란색으로 하이라이트된 부분이 비어있기 때문에 이 부분이 Tensor 1의 axis 0에 맞춰져 계산됨
Example 2
- Tensor1(5,3), Tensor2(8, 5, 1), Tensor3(8, 1, 3) 의 shape을 갖는 세 텐서의 연산을 수행한다고 하면 결과 Tensor4의 shape은 (8,5,3)으로 예상할 수 있다.
마무리
Reference
[1] numpy broadcasting docs
[2] Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython
'프로그래밍 언어 > python' 카테고리의 다른 글
[xlwings] 파이썬으로 excel 파일 다루기 (1) quick start (0) | 2022.09.28 |
---|---|
[python] 객체 지향 프로그래밍 1 - Object oriented python (0) | 2022.08.08 |
short-circuit evaluation (0) | 2022.07.26 |
jupyter module autoreload (0) | 2022.07.26 |
*args와 **kwargs 활용하기 (0) | 2022.07.26 |