math
CHAPTER 34 / 45
읽기 약 2분
FUNCTION
벡터: 방향과 크기의 수학
핵심 개념
스칼라 vs 벡터 — numpy 배열로 2D/3D 벡터 연산. 게임 이동·추천 시스템·Word2Vec 임베딩의 수학적 기반.
본문
스칼라 vs 벡터
스칼라: 단일 값 (5, -3.14)
벡터: 방향 + 크기 (2D: [3, 4], 3D: [1, 2, 3])
벡터의 크기 (norm/magnitude):
||v|| = √(x² + y² + z² + ...)numpy로 벡터 연산
import numpy as np
v1 = np.array([3, 4])
v2 = np.array([1, 2])
# 덧셈·뺄셈
print(v1 + v2) # [4 6]
print(v1 - v2) # [2 2]
# 스칼라 곱
print(2 * v1) # [6 8]
# 크기 (norm)
print(np.linalg.norm(v1)) # 5.0 (피타고라스 √(9+16))
print(np.linalg.norm(v1 - v2)) # 두 점 사이 거리
# 단위 벡터 (방향만, 크기 1)
unit = v1 / np.linalg.norm(v1)
print(unit) # [0.6 0.8]
print(np.linalg.norm(unit)) # 1.0실전 — 게임 캐릭터 이동
import numpy as np
# 캐릭터 위치 + 속도 벡터
position = np.array([10.0, 20.0])
velocity = np.array([2.0, -1.0])
# 매 프레임 위치 업데이트
def update(pos, vel, dt=1/60):
return pos + vel * dt
for frame in range(5):
position = update(position, velocity)
print(f"frame {frame}: {position}")
# 적까지의 거리·방향
enemy = np.array([15.0, 18.0])
diff = enemy - position
distance = np.linalg.norm(diff)
direction = diff / distance # 단위 벡터
print(f"\n적까지 거리: {distance:.2f}")
print(f"방향: {direction}")
print(f"5단위 이동 후: {position + direction * 5}")실전 — 추천 시스템 사용자 벡터
# 각 사용자를 카테고리 선호도 벡터로 표현
# 카테고리: [영화, 음악, 책, 게임, 스포츠]
users = {
'Alice': np.array([0.8, 0.2, 0.5, 0.1, 0.0]), # 영화·책 선호
'Bob': np.array([0.3, 0.9, 0.1, 0.7, 0.2]), # 음악·게임 선호
'Charlie': np.array([0.7, 0.3, 0.6, 0.2, 0.1]), # Alice와 비슷
}
# 두 사용자의 거리 = 취향 차이
def user_distance(u1, u2):
return np.linalg.norm(u1 - u2)
print(user_distance(users['Alice'], users['Charlie'])) # 0.22 (가까움)
print(user_distance(users['Alice'], users['Bob'])) # 1.15 (멀음)
# Alice와 가장 비슷한 사용자 찾기
def find_similar(target_user, all_users):
target = all_users[target_user]
distances = [
(name, user_distance(target, vec))
for name, vec in all_users.items() if name != target_user
]
return min(distances, key=lambda x: x[1])
print(find_similar('Alice', users)) # ('Charlie', 0.22)실전 — Word2Vec 임베딩 기초
# 단어를 N차원 벡터로 표현 — 의미 관계가 벡터 연산으로 표현됨
# 가상 임베딩 (실제는 학습된 모델 사용)
embeddings = {
'king': np.array([0.5, 0.8, 0.2, 0.9]),
'queen': np.array([0.5, 0.8, 0.2, 0.1]),
'man': np.array([0.5, 0.3, 0.7, 0.9]),
'woman': np.array([0.5, 0.3, 0.7, 0.1]),
}
# king - man + woman ≈ queen (의미 관계 학습)
result = embeddings['king'] - embeddings['man'] + embeddings['woman']
print(result) # [0.5 0.8 0.2 0.1] = queen 와 동일!
# 가장 가까운 단어 찾기
def closest_word(target, all_emb):
return min(
all_emb.items(),
key=lambda kv: np.linalg.norm(kv[1] - target),
)[0]
print(closest_word(result, embeddings)) # queen
# 실전: gensim·sentence-transformers 라이브러리로 사전 훈련 모델 사용
# from sentence_transformers import SentenceTransformer
# model = SentenceTransformer('all-MiniLM-L6-v2')
# embeddings = model.encode(['Hello', '안녕'])다음 챕터
CH.35 "내적" — 코사인 유사도와 벡터 검색의 수학.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 추천 시스템에 사용자 벡터를 적용하는 방법과 적합한 거리 함수를 실전 사례로 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
한국 AI 스타트업의 임베딩 활용 사례 5개를 비교해서 실전 인사이트를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 데이터의 사용자 행동 벡터를 생성하고 클러스터링·유사도 분석 결과를 시각화해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 LLM 임베딩 모델(OpenAI/Cohere/오픈소스) 실전 비교와 한국어 성능을 솔직히 알려줘.
⭐ 이것만 기억하세요
벡터: 방향과 크기의 수학은 이 3가지만 확실히 잡으세요
1.벡터는 방향과 크기를 동시에 표현 — 스칼라(단일 값)와 달리 N차원 공간의 위치/이동
2.실전 응용: 게임 이동 (속도 벡터), 추천 시스템 (사용자 벡터), AI 임베딩 (의미 벡터)
3.다음 챕터 CH.35에서 내적(dot product) — 두 벡터의 유사도 계산이 검색·추천의 핵심
공유하기
진행도 34 / 45