티스토리 뷰

728x90
반응형

넘파이(Numpy)는 파이썬에서 과학적 계산을 위한 강력한 라이브러리로, 수치 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다. 그 중에서도 **브로드캐스팅(Broadcasting)**은 넘파이 배열 간의 연산을 단순화하고 효율적으로 만들어주는 중요한 개념입니다. 이 글에서는 브로드캐스팅의 개념, 작동 원리, 그리고 사용 예제를 자세히 살펴보겠습니다.

1. 브로드캐스팅의 개념


브로드캐스팅은 두 개의 배열이 서로 다른 형태(shape)를 가질 때, 작은 배열을 자동으로 확장하여 큰 배열의 형태에 맞춰 연산을 수행하는 기법입니다. 이를 통해 개발자는 배열의 크기를 맞추기 위해 수동으로 반복할 필요 없이 간편하게 연산을 수행할 수 있습니다.

2. 브로드캐스팅의 규칙


브로드캐스트가 가능하려면 다음의 규칙을 따라야 합니다:

차원이 같을 때: 두 배열의 차원이 같으면 직접적으로 연산할 수 있습니다.
차원이 다를 때: 두 배열 중 하나의 차원이 1인 경우, 그 차원을 확장하여 다른 배열의 차원에 맞출 수 있습니다.
차원이 1이 아닌 경우: 두 배열의 차원 수가 다르다면, 작은 배열의 차원 수가 큰 배열의 차원 수에 맞춰 1로 패딩됩니다.

 


3. 예제


다음 예제를 통해 브로드캐스팅이 어떻게 작동하는지 알아보겠습니다.

예제 1: 기본적인 브로드캐스팅

import numpy as np

# 1차원 배열
a = np.array([1, 2, 3])
# 2차원 배열
b = np.array([[10], [20], [30]])

# 브로드캐스팅을 통한 덧셈
result = a + b
print(result)


위 코드에서 a는 (3,) 형태를 가지고, b는 (3, 1) 형태입니다. 브로드캐스팅을 통해 a가 (3, 3) 형태로 확장되어 b와 더해집니다. 결과는 다음과 같습니다:

[[11 12 13]
 [21 22 23]
 [31 32 33]]



예제 2: 다차원 배열의 브로드캐스팅

import numpy as np

# 2차원 배열
x = np.array([[1, 2, 3], [4, 5, 6]])
# 1차원 배열
y = np.array([10, 20, 30])

# 브로드캐스팅을 통한 덧셈
result = x + y
print(result)


여기서 x는 (2, 3) 형태, y는 (3,) 형태입니다. y는 (1, 3)으로 확장되어 x와 더해지며, 결과는 다음과 같습니다:

[[11 22 33]
 [14 25 36]]

 

예제 1: 기본적인 곱셈

import numpy as np

# 1차원 배열
a = np.array([1, 2, 3])
# 2차원 배열
b = np.array([[10], [20], [30]])

# 브로드캐스팅을 통한 곱셈
result = a * b
print(result)


위 코드에서 a는 (3,) 형태를 가지고, b는 (3, 1) 형태입니다. a는 (3, 3) 형태로 확장되어 b와 곱해집니다. 결과는 다음과 같습니다:

[[10 20 30]
 [40 50 60]
 [60 70 90]]




예제 2: 다차원 배열의 곱셈

import numpy as np

# 2차원 배열
x = np.array([[1, 2, 3], [4, 5, 6]])
# 1차원 배열
y = np.array([10, 20, 30])

# 브로드캐스팅을 통한 곱셈
result = x * y
print(result)


여기서 x는 (2, 3) 형태, y는 (3,) 형태입니다. y는 (1, 3)으로 확장되어 x와 곱해지며, 결과는 다음과 같습니다:

[[10 40 90]
 [40 100 180]]




예제 3: 3차원 배열과의 곱셈
브로드캐스팅은 더 높은 차원에서도 가능합니다.

import numpy as np

# 3차원 배열
x = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# 1차원 배열
y = np.array([1, 2, 3])

# 브로드캐스팅을 통한 곱셈
result = x * y
print(result)


여기서 x는 (2, 2, 3) 형태를 가지고, y는 (3,) 형태입니다. y는 (1, 1, 3)으로 확장되어 x와 곱해지며, 결과는 다음과 같습니다:

[[[ 1  4  9]
  [ 4 10 18]]

 [[ 7 16 27]
  [10 22 36]]]






4. 브로드캐스팅의 장점

코드 간결성: 배열의 크기를 맞추기 위해 반복문을 사용할 필요가 없어 코드가 간결해집니다.
성능 향상: 넘파이는 배열 연산을 최적화하여 성능을 향상시킵니다. 브로드캐스팅을 사용하면 메모리 사용량을 줄이면서도 빠른 계산이 가능합니다.


※주의사항 ※

 

 

넘파이의 브로드캐스팅이 항상 가능한 것은 아닙니다. 
배열의 형태가 호환되지 않는 경우에는 ValueError가 발생합니다. 
따라서 브로드캐스팅을 사용할 때는 배열의 형태를 잘 확인해야 합니다.

 

 

728x90
반응형