다섯 패턴
AI 에서 거의 모든 벡터 코드 조각이 이 다섯 중 하나. 시각으로 알면 읽기 시간 엄청 절약.
- Element-wise op —
a + b,a * b,np.exp(a). 같은 모양 in, 같은 모양 out. - Reduction —
a.sum(),a.mean(),a.max(). 많은 게 in, 하나 (또는 적게) out.axis=선택 지정. - 내적 / 행렬곱 —
a @ b. 두 벡터 → 스칼라. 벡터+행렬 → 벡터. 두 행렬 → 행렬. - Broadcasting — 다른 모양 배열에 작업, 하나가 매치 위해 "올라감".
matrix + vector가 종종 그냥 됨. - Slicing / fancy 인덱싱 —
a[2:5],a[a > 0],a[indices]. 루프 없이 부분집합 뽑기.
30초 broadcasting
NumPy/PyTorch 가 (3,) 벡터를 (4, 3) 행렬에 더하게 해줘 — 벡터가 각 행에 broadcast. 룰: 차원이 같거나 한 쪽이 1 일 때 호환. 오른쪽부터 정렬. 룰 실패 = 전설의 shapes ... not aligned 에러.
배열 element 위로 루프 작성 멈춰.
for i in range(len(arr)) 자신이 쓰고 있으면 물어: vectorized 버전 있나? 95% 경우 yes — 그리고 10-1000배 빨라.트랙 보상
이제 벡터로 사고. 크기 × 방향 = 단위. 내적 = 정렬-숫자. Norm = 고를 수 있는 자. 연산 vectorize. 여기서부터 행렬은 함께 작동하는 벡터 stack — 다음 트랙.
just do it 정신을 잠시 잃고 너무 오랜만에 돌아왔어 , 평균 0 , 표준편차 1 인거 확인!
import numpy as np
rng = np.random.default_rng(42) X = rng.standard_normal((5, 3))
mu = X.mean(axis=0) sigma = X.std(axis=0)
Z = (X - mu) / sigma
print("열 평균:", Z.mean(axis=0)) print("열 std :", Z.std(axis=0))
assert np.allclose(Z.mean(axis=0), 0, atol=1e-12) assert np.allclose(Z.std(axis=0), 1, atol=1e-12) print("검증 통과")