← 문제 목록/Top-k 코사인 이웃 검색
문제 해설

Top-k 코사인 이웃 검색

NumPy 기초 · easy

preview

Top-k 코사인 이웃 검색

18번 코사인 행렬 의 실전 응용. 행렬을 계산해서 각 쿼리마다 상위 k개의 이웃 인덱스 를 돌려주는 패턴은 벡터 검색 의 가장 기본 루프입니다:

  • 문서 임베딩에서 비슷한 문서 찾기
  • 이미지 임베딩 기반 검색
  • 추천 시스템 (user→item, item→item)

알고리즘

  1. 코사인 유사도 행렬 계산 (N_query, N_db).
  2. 각 행을 내림차순 정렬 → 상위 k 인덱스 선택.
  3. argsort 는 오름차순이므로 -sim 쓰거나 [:, -k:] 를 뒤집는다.

top-k(Xq,Xdb)i=argsort(cos(Xq,Xdb)i)[:k]\text{top-k}(X_q, X_{db})_i = \text{argsort}(-\text{cos}(X_q, X_{db})_i)[:k]

과제

함수 top_k_cosine(X_query, X_db, k) 를 완성하세요.

  • X_query shape (N_query, D), X_db shape (N_db, D).
  • 반환: shape (N_query, k) 정수 인덱스 배열. 각 행은 유사도 내림차순.

테스트 케이스

#이름검증
1shape (Nq, k)정확
2query ⊂ db 이면 top-1 == 자기자신완벽 일치 행은 1위
3k = 1 의 각 결과가 argmax 와 일치수동 계산으로 확인
4인덱스 유효성0 ≤ idx < N_db
5내림차순 순서cos[top_k[:, 0]] ≥ cos[top_k[:, 1]] ≥ ...
코드 작성
Loading...
실행 결과

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