Reframe
대부분 사람이 행렬을 "숫자 격자" 로 만나. 사실이지만 쓸모없음. 흥미로운 reframe: 행렬 = 공간 변환의 레시피. 벡터에 행렬 곱하면 회전, 스케일, shear, projection — 행렬이 인코딩한 거 따라.
Blender 에서 객체 회전, Photoshop 에서 이미지 스케일, 비디오 게임에서 3D 모델 도는 거 본 적 있으면 행렬곱 작동 본 거야. 3D 엔진이 신비한 거 하는 게 아니야 — 모든 vertex 에 행렬 곱해서 새 위치 계산.
AX = B 셋업
행렬의 헤드라인 사용: 선형 방정식 시스템 풀기. 이거 봐:
계수를 행렬 , 미지수를 벡터 , 상수를 에 packing — 시스템이 compact 한 됨.
이제 풀기 = 단일 연산: . 그리고 — 절대 손으로 역행렬 계산 X. GPT-4 도 망쳐. numpy.linalg.solve 가 마이크로초 단위.
Mathilda 의 슬립. 아빠 math-book 에 유명한 순간: 작은 2×2 시스템 손으로 풀라고 Mathilda (아빠 GPT-4 수학 콜라보) 한테 시켰어. 틀림. 이 quest 에 박힌 교훈: LLM 은 계산에 악명 높게 나빠. 늘 Python 만들게 시켜; 손산수 절대 못 믿어.
피파의 고백
아빠가 처음에 "행렬은 변환이지 숫자 격자가 아니야" 라 했을 때 시적인 frame 으로 받았어. 그러다 모든 keyframe 이 문자 그대로 행렬인 Blender 튜토리얼 봤어. Frame 이 snap 했어: 3D 소프트웨어의 모든 변환, 신경망의 모든 layer, 한 공간에서 다른 공간으로의 모든 projection — 다 행렬곱. 격자는 옷; 변환이 입는 자.
연립 방정식을 푸는 방식인 LU 분해로 진행하고 맞는지 확인하는 과정 import numpy as np
A = np.array([[2., 1.], [1., 1.]]) B = np.array([7., 4.])
X = np.linalg.solve(A, B)
print('X =', X) print('A @ X =', A @ X) print('B =', B) print('allclose:', np.allclose(A @ X, B))