← 문제 목록/Angular Distance (proper metric) [medium]
문제 해설

Angular Distance (proper metric) [medium]

거리/유사도 · medium

preview

Angular Distance (proper metric) [medium]

v1 코사인 유사도 와 코사인 거리 (1cos1 - \cos) 는 삼각부등식 을 만족하지 않아 엄밀한 metric 이 아닙니다. Angular distance 는 각도 자체를 거리로 써서 이를 해결:

dθ(x,y)=arccos(cos(x,y))π[0,1]d_\theta(x, y) = \frac{\arccos\left(\cos(x, y)\right)}{\pi} \in [0, 1]

  • 같은 방향 → 0 (각도 0)
  • 직교 → 0.5 (각도 π/2)
  • 반대 방향 → 1 (각도 π)

왜 metric 인가

  • 비음성, 대칭, 자기자신 = 0 ✓
  • 삼각부등식: dθ(x,z)dθ(x,y)+dθ(y,z)d_\theta(x, z) \le d_\theta(x, y) + d_\theta(y, z)
  • 코사인 거리는 삼각부등식 위반: 예) 30°+30° 거리가 60° 거리와 같지 않음 (각 아닌 1-cos 스케일).

수치 안정성

arccos(x)x[1,1]x \in [-1, 1] 만 정의됨. 부동소수 오차로 1.00000011.0000001 이 되면 NaN. clip 필수:

c = np.clip(dot / (nx * ny), -1.0, 1.0)
return np.arccos(c) / np.pi

과제

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

  • 1D 배열 x, y.
  • 반환: Python float [0,1]\in [0, 1].
  • 영벡터는 d=0.5d = 0.5 로 정의 (관례).

테스트 케이스

#이름검증
1float 반환
2같은 방향 → 0
3반대 방향 → 1
4직교 → 0.5
5[0, 1] 범위
6부동소수 안전 (동일 벡터 NaN 없음)clip 필수
7삼각부등식 만족 (random 3벡터)
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.