본문 바로가기
C.W.K.
Stream
Lesson 02 of 07 · published

Vectorization & Broadcasting — 사고 전환

~14 min · numpy, broadcasting, vectorization

Level 0구경꾼
0 XP0/47 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

Loop 그만 써

배열 없는 언어에서 넘어올 때 제일 깊이 박혀 오는 습관이 요소별 연산을 loop 로 쓰는 거야: for i in range(len(x)): result[i] = x[i] * 2. NumPy 에선 result = x * 2 라고 적으면 끝이야. 같은 답이 더 빨리 나오고, 코드는 짧아지고, (이게 은근히 중요한데) off-by-one 에러가 낄 자리 자체가 없어져.

더 어려운 전환은 배열 두 개를 묶는 연산이야. Python 리스트라면 zip(a, b) 에 comprehension 을 얹었겠지. NumPy 에선 a * b — shape 만 호환되면 NumPy 가 알아서 처리해.

Broadcasting 한 단락 요약

Broadcasting 은 모양이 다른 배열을 결합할 때 NumPy 가 따르는 규칙이야. 규칙은 셋: 뒤쪽 차원부터 맞춰 보고, 크기 1인 차원은 늘려서 맞추고, 아예 없는 차원은 크기 1로 쳐. 이게 왜 좋으냐면 — "이 row 벡터를 행렬의 모든 row 에 더해", "모든 요소에서 이 스칼라 빼" 같은 걸 loop 한 줄 없이, 중간 copy 한 번 없이 그대로 적을 수 있거든.

Code

Vectorization — loop 없는 요소별 연산·python
import numpy as np

x = np.arange(10)            # 0..9

doubled = x * 2              # 요소별 스칼라 곱
shifted = x + 100            # 요소별 스칼라 덧셈
squared = x ** 2             # 요소별 거듭제곱
evens   = x[x % 2 == 0]      # boolean mask 필터

y = np.linspace(0, 1, 10)    # 0~1 사이 10개 float
weighted_sum = (x * y).sum() # vectorized 곱, 그리고 reduce
Broadcasting — 다른 shape, 같은 연산·python
import numpy as np

# 2D 행렬과 1D row 벡터
matrix = np.arange(12).reshape(3, 4)        # shape (3, 4)
row    = np.array([10, 20, 30, 40])         # shape (4,)

# Broadcasting: (4,) 가 (1, 4) 로 취급되고 (3, 4) 로 stretching
result = matrix + row
# matrix 의 모든 row 에 row 더해짐

# Column 벡터 — (3, 1) shape 명시 주의
col = np.array([100, 200, 300]).reshape(3, 1)  # shape (3, 1)
result_col = matrix + col
# matrix 의 모든 column 에 col 더해짐

# Z-score 정규화 — 양방향 broadcasting
data = np.random.default_rng(0).normal(size=(1000, 5))
z = (data - data.mean(axis=0)) / data.std(axis=0)   # column 별 평균/표준편차로

External links

Exercise

(1000, 3) 모양의 random 3D 점 배열을 만들어. Python loop 없이 각 점에서 원점까지의 거리를 계산해 봐 — broadcasting 과 np.sqrt 조합으로. 그리고 argmin / argmax 로 가장 가까운 점과 가장 먼 점의 인덱스를 찾아.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.