OPEN HYPER STEP
← 목록으로 (math)
MATH · 34 / 45
math
CHAPTER 34 / 45
읽기 약 2
FUNCTION

벡터: 방향과 크기의 수학


핵심 개념

스칼라 vs 벡터 — numpy 배열로 2D/3D 벡터 연산. 게임 이동·추천 시스템·Word2Vec 임베딩의 수학적 기반.

본문

스칼라 vs 벡터

📋 코드 (5줄)
스칼라: 단일 값 (5, -3.14)
벡터: 방향 + 크기 (2D: [3, 4], 3D: [1, 2, 3])

벡터의 크기 (norm/magnitude):
||v|| = √(x² + y² + z² + ...)

numpy로 벡터 연산

PYTHON📋 코드 (20줄)
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

실전 — 게임 캐릭터 이동

PYTHON📋 코드 (25줄)
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}")

실전 — 추천 시스템 사용자 벡터

PYTHON📋 코드 (30줄)
# 각 사용자를 카테고리 선호도 벡터로 표현
# 카테고리: [영화, 음악, 책, 게임, 스포츠]

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 임베딩 기초

PYTHON📋 코드 (31줄)
# 단어를 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