Loop 그만 써
비-배열 언어에서 가져오는 가장 깊은 습관은 요소별 연산을 loop 로 쓰는 거: for i in range(len(x)): result[i] = x[i] * 2. NumPy 에선 result = x * 2 라고 말하면 같은 답을, 더 빠르게, 더 적은 코드로, (이게 underrated 인데) off-by-one 에러 여지 적게 생산.
더 어려운 전환은 두-배열 연산. Python 리스트로는 zip(a, b) + comprehension. NumPy 로는 a * b — shape 만 호환되면 NumPy 가 알아서 처리.
Broadcasting 한 단락 요약
Broadcasting 은 다른 shape 의 배열을 결합하는 NumPy 규칙들이야. 규칙: 후행 차원 align, size 1 차원은 stretching, 빠진 차원은 size 1 으로 취급. 왜 신경 써야 하냐면 — "이 row 벡터를 이 행렬의 모든 row 에 더해" 또는 "모든 요소에서 이 스칼라 빼" 를 loop 한 줄도 안 쓰고, 중간 copy 도 할당 안 하고 표현할 수 있어.