Pandas / Numpy 브로드캐스트

Ryan·2025년 2월 5일

Python/Pandas

목록 보기
14/23

브로드캐스팅 개념 (Broadcasting in NumPy & Pandas)

데이터 분석 및 과학 연산을 수행할 때, 다양한 크기의 배열이나 데이터 구조를 효율적으로 연산하는 방법이 필요합니다. 브로드캐스팅(Broadcasting)은 이러한 연산을 가능하게 해주는 개념으로, NumPy와 Pandas에서 중요한 역할을 합니다.

1. 브로드캐스팅이란?

브로드캐스팅은 차원과 형태(Shape)가 다른 배열 간의 연산을 가능하게 하는 방법입니다. 작은 차원의 배열이 큰 차원의 배열로 변환(확장)되어 연산이 수행됩니다. 이를 통해 명시적인 반복 없이도 연산이 가능하며, 코드의 간결성과 성능 최적화에 기여합니다.

2. NumPy에서의 브로드캐스팅

NumPy에서는 브로드캐스팅을 활용하여 차원이 다른 배열 간의 연산이 가능합니다. 아래 몇 가지 예제를 통해 이를 살펴보겠습니다.

(1) 스칼라와 벡터 간의 연산

import numpy as np
arr = np.array([1, 2, 3])
result = arr + 5
print(result)  # [6, 7, 8]

🔍 설명

위 코드에서 arr은 1차원 배열이며, 5는 스칼라 값입니다. NumPy는 5array([5, 5, 5])처럼 변환하여 arr과 요소별(element-wise) 덧셈을 수행합니다.

(2) 2D 배열과 1D 배열 간의 연산

arr2D = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
arr1D = np.array([1, 2, 3])
result = arr2D + arr1D
print(result)

결과:

[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]

🔍 설명

  • arr2D는 (3×3) 형태의 2D 배열이고, arr1D는 (1×3) 형태의 1D 배열입니다.
  • arr1Darr2D의 각 행(row)에 대해 복제되어 덧셈 연산이 수행됩니다.

(3) 2D 배열과 (n, 1) 형태의 1D 배열 간의 연산

arr2D = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
arr1D_col = np.array([[1], [2], [3]])  # (3,1) 형태
result = arr2D + arr1D_col
print(result)

결과:

[[ 2  3  4]
 [ 6  7  8]
 [10 11 12]]

🔍 설명

  • arr1D_col의 형태는 (3,1)이며, 이는 arr2D의 각 열(column)에 대해 복제됩니다.
  • 따라서 행(row) 방향으로 값이 각각 1, 2, 3씩 더해진 결과를 얻게 됩니다.

3. Pandas에서의 브로드캐스팅

Pandas에서도 Series와 DataFrame 간의 연산이 가능하며, 이때 브로드캐스팅이 활용됩니다.

(1) Series와 DataFrame 간의 연산

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})
series = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
result = df + series
print(result)

결과:

   A  B   C
0  2  6  10
1  3  7  11
2  4  8  12

🔍 설명

  • df는 3×3 형태의 DataFrame이고, series는 각 컬럼(A, B, C)에 대응하는 값을 가진 Series입니다.
  • Pandas는 컬럼(column) 기준으로 브로드캐스팅을 수행하여 각 행(row)과 연산을 적용합니다.

4. 브로드캐스팅의 조건

NumPy에서 브로드캐스팅이 작동하려면 다음 규칙을 따라야 합니다:

  1. 두 배열의 차원을 오른쪽에서부터 비교합니다.
  2. 차원이 일치하거나, 한 배열의 차원이 1이면 브로드캐스팅이 가능합니다.
  3. 두 배열의 차원이 완전히 일치할 때까지 자동으로 확장됩니다.

예를 들어, 다음과 같은 경우에는 브로드캐스팅이 적용됩니다.

  • (3,3) + (3,1) → (3,3) + (3,3) ✅
  • (3,3) + (1,3) → (3,3) + (3,3) ✅
  • (3,3) + (3,) → (3,3) + (3,3) ✅
  • (3,3) + (2,1) → ❌ 차원이 맞지 않아 에러 발생

5. 브로드캐스팅의 장점

코드 간결성: 반복문 없이 간단한 연산이 가능
연산 속도 향상: 불필요한 복사를 방지하여 메모리 효율적 사용
벡터 연산 최적화: NumPy 내부적으로 C 기반 연산 수행 → 빠른 계산

6. 결론

브로드캐스팅은 NumPy와 Pandas에서 차원이 다른 배열 간의 연산을 가능하게 하는 강력한 기능입니다. 이를 활용하면 더 적은 코드로 효율적인 연산을 수행할 수 있습니다. 특히 데이터 분석 및 머신러닝에서 자주 사용되므로, 이를 이해하고 활용하는 것이 중요합니다.

0개의 댓글