← 문제 목록/코사인 유사도 행렬 (배치)

코사인 유사도 행렬 (배치)

NumPy 기초 · easy

preview

코사인 유사도 행렬

앞서 13번에서 두 벡터 사이의 코사인을 구했죠. 실전에선 한 쌍이 아니라 수많은 쌍 을 한 번에 비교합니다 — 문서 간 유사도, 임베딩 검색, KNN 등.

cosine(X,Y)ij=xiyjxiyj\text{cosine}(X, Y)_{ij} = \frac{x_i \cdot y_j}{\|x_i\| \, \|y_j\|}

두 행렬 XX (shape (N, D)), YY (shape (M, D)) 가 주어지면 결과는 (N, M) 유사도 행렬.

핵심 트릭

각 행을 단위 벡터로 먼저 정규화 해두면 그 뒤엔 그냥 행렬 곱:

X^=X/Xrow,Y^=Y/Yrowcos(X,Y)=X^Y^\hat{X} = X / \|X\|_{\text{row}}, \quad \hat{Y} = Y / \|Y\|_{\text{row}} \quad \Rightarrow \quad \text{cos}(X, Y) = \hat{X} \hat{Y}^\top

과제

함수 cosine_matrix(X, Y) 를 완성하세요.

  • 루프 없이 벡터·행렬 연산.
  • 반환: (N, M) NumPy 배열. 각 값은 [-1, 1].
  • np.linalg.norm(X, axis=1, keepdims=True) 로 행별 norm.

테스트 케이스

#이름검증
1shapeX (3,4), Y (5,4)(3,5)
2자기자신 → 대각선 1X=Y 일 때 diag ≈ 1
3값 범위모든 성분이 [-1, 1]
4반대 방향 쌍직접 설정한 반대 벡터는 -1
5루프 없이for/while 금지
Loading...

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