NumPy의 핵심: 연산자가 배열의 각 요소에 개별적으로 적용됩니다.
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
# 덧셈: 각 요소끼리 더하기
print(f"a + b = {a + b}") # [11, 22, 33, 44]
# 곱셈: 각 요소끼리 곱하기
print(f"a * b = {a * b}") # [10, 40, 90, 160]
# 제곱
print(f"a ** 2 = {a ** 2}") # [1, 4, 9, 16]
# 스칼라 연산 (모든 요소에 적용)
print(f"a * 2 = {a * 2}") # [2, 4, 6, 8]
print(f"a + 10 = {a + 10}") # [11, 12, 13, 14]
Python List와의 차이:
# Python List
list_a = [1, 2, 3]
list_b = [10, 20, 30]
# list_a + list_b = [1, 2, 3, 10, 20, 30] (이어붙이기!)
# list_a * 2 = [1, 2, 3, 1, 2, 3] (반복!)
# NumPy Array
arr_a = np.array([1, 2, 3])
arr_b = np.array([10, 20, 30])
# arr_a + arr_b = [11, 22, 33] (원소별 덧셈)
# arr_a * 2 = [2, 4, 6] (원소별 곱셈)
브로드캐스팅은 NumPy가 다른 크기의 배열끼리도 연산할 수 있게 해주는 메커니즘입니다.
기본 규칙
# 예제 1: 스칼라 + 배열
arr = np.array([1, 2, 3])
result = arr + 10 # 10이 [10, 10, 10]으로 확장됨
print(f"[1,2,3] + 10 = {result}") # [11, 12, 13]
# 예제 2: 1D + 2D
matrix = np.array([
[1, 2, 3],
[4, 5, 6]
])
vector = np.array([10, 20, 30])
result = matrix + vector
print("Matrix:\\n", matrix)
print("Vector:", vector)
print("Matrix + Vector:\\n", result)
# [[11, 22, 33],
# [14, 25, 36]]브로드캐스팅은 NumPy가 부족한 차원을 '가상으로' 복사하여 두 배열의 모양을 맞춰주는 기능입니다.
matrix + vector 예제에서:
NumPy는 vector를 matrix의 각 행에 더해야 한다고 판단합니다.