GDSC Seoultech DL 1주차 과제

ParkJeongJoon·2022년 9월 22일
0

GDSC Seoultech

목록 보기
2/2

1주차 DL과제 - (3)Python-Numpy에만 있는 Broadcasting
사다리타기 한 결과 나는 3번이 당첨되어 3번 과제 내용을 구글링해 정리했다!

Broadcasting이란? numpy가 연산 중에 다른 모양(shapes)의 배열을 처리하는 방법, 즉 다차원 배열에서 shape가 다른 배열끼리의 연산이 가능하게 하는 기능.
단 이 기능은 배열의 모양이 특정 조건을 충족할 때 작동한다.

일반적으로 모양이 다른 배열끼리는 연산이 불가능하지만 어떤 조건을 만족한다면 부족한 부분(더 작은 차원)의 값이 확장되는 형태로 연산을 수행할 수 있게 된다.
즉, 배열을 계산이 가능한 형태가 되도록 임의로 변형(차원이 확장되는 형태로 변형)이 이루어져서 broadcasting이라고 일컫게 되었다.

예를 들어,
a = np.array([[1,2],[3,4]])
b = np.array([10, 20])
a * b

결과는 아래처럼 b라는 1차원 배열이 2차원으로 확장되어서 곱해진다.

array([[10, 40],
[30, 80]])

정리해보면, 브로드캐스팅이 적용되는 조건은 다음과 같다.
1. 이어지는 두 축에 대해 축의 길이가 일치할 때
2. 둘 중 하나의 축의 길이가 1일 때

이 조건이 충족되지 않으면, ValueError: operands could not be broadcast together라는 에러가 발생하면서
배열이 서로 호환되지 않는 shape임을 나타낸다.

배열은 반드시 같은 차원의 수를 가질 필요는 없다.(단 이 경우는 무조건 하나의 축은 1이어야 함을 전제로 한다,)
둘 중 하나의 차원이 1차원, 이 1차원이 확장되어서 다른 배열의 차원과 호환이 가능해진다.

실제로 브로드캐스팅의 예제는 이러하다.


import numpy as np

arr1 = np.array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])

arr2 = np.array([5, 6, 7])

print(arr1 + arr2)

[[5 6 7][6 7 8]
[7 8 9]]


import numpy as np

arr3 = np.array([1, 1, 1])

arr4 = np.array([[0],
[1],
[2]])

print(np.add(arr3, arr4))

[[1 1 1][2 2 2]
[3 3 3]]


import numpy as np

arr = np.arange(1, 4)
#[1 2 3]
x = 2
print(arr * x)
#[2 4 6]

#배열과 스칼라 연산에도 브로드캐스팅이 적용된다.


import numpy as np

a = np.array([[ 0.0, 0.0, 0.0],
[10.0, 10.0, 10.0],
[20.0, 20.0, 20.0],
[30.0, 30.0, 30.0]])

b = np.array([1.0, 2.0, 3.0])

print(a + b)
'''
[[ 1. 2. 3.][11. 12. 13.]
[21. 22. 23.][31. 32. 33.]]

'''

profile
이제부터가 진짜 시작이야

0개의 댓글