NumPy 기초·연습 문제

코사인 거리 (1 - cos)

문제 설명PROBLEM

preview

코사인 거리 (Cosine Distance)

13번 코사인 유사도유사도(높을수록 비슷). 거리 지표가 필요할 땐 단순히 1에서 빼면 됩니다:

dcos(x,y)=1cos(x,y)=1xyxyd_{\cos}(\mathbf{x}, \mathbf{y}) = 1 - \cos(\mathbf{x}, \mathbf{y}) = 1 - \frac{\mathbf{x} \cdot \mathbf{y}}{\|\mathbf{x}\| \, \|\mathbf{y}\|}

범위: [0,2][0, 2]

  • 같은 방향 → 0 (완전히 가까움)
  • 직교 → 1
  • 반대 방향 → 2

어디 쓰나?

KNN·클러스터링에서 방향 기반 유사도가 필요할 때. 텍스트 임베딩(TF-IDF, word2vec)과 문서 검색이 대표 사례 — 문서 길이와 무관하게 "주제" 만 비교.

주의: 코사인 거리는 참 거리 메트릭이 아님 (삼각부등식을 만족하지 않을 수 있음). 진짜 메트릭이 필요하면 angular distance = arccos(cos) / π 를 씀.

과제

함수 cosine_distance(x, y) 를 완성하세요.

  • 입력: 1D 배열 두 개.
  • 반환: Python float, 범위 [0, 2].
  • 한 줄: 1 - cos(x, y) 혹은 직접 수식.

테스트 케이스

#이름xy기대
1같은 벡터[1, 2, 3][1, 2, 3]0.0
2스케일 불변[1, 0][5, 0]0.0
3직교 → 1[1, 0][0, 1]1.0
4반대 방향 → 2[1, 2][-1, -2]2.0
545°[1, 1][1, 0]1 - 1/√2 ≈ 0.293
개념 노트와 실수 포인트

NumPy 기초

  • ⚠️ axis 헷갈림: axis=0 은 행을 가로질러 → 열별 결과, axis=1행별 결과.
  • 브로드캐스팅: shape 를 뒤에서부터 맞춤(1 또는 같은 크기).
  • 반복문 대신 벡터화 연산. @(행렬곱) 와 *(요소곱) 구분.