모든 챌린지
쉬움 0명 해결 정답률 0%

Cosine Similarity

Measure how similar two vectors are by the angle between them, as search engines do with embeddings.

배우게 될 내용

  • Measure similarity by angle
  • Compute dot products and vector norms
  • Understand how semantic search compares texts

문제

번역본 보기

Cosine similarity compares the direction of two vectors and ignores their length. Semantic search uses it to find texts with similar embeddings:

cos(a, b) = (a · b) / (|a| × |b|), where |a| = √(a₁² + a₂² + … + aₙ²)

The result is 1 for the same direction, 0 for perpendicular vectors and -1 for opposite directions. If either vector is all zeros, return 0.

Implement cosine_similarity(a, b).

Input

a, b: Two lists of numbers with the same length.

Output

Return the cosine similarity as a decimal number.

제약 조건

1 ≤ length ≤ 1,000

-1,000 ≤ each value ≤ 1,000

예시

예시 1
입력:
a = [1.0, 0.0]
b = [0.0, 1.0]

예상 출력:
expected = 0.0
입력:
std::vector<double> a = {1.0, 0.0};
std::vector<double> b = {0.0, 1.0};

예상 출력:
double expected = 0.0;
입력:
double[] a = new double[] {1.0, 0.0};
double[] b = new double[] {0.0, 1.0};

예상 출력:
double expected = 0.0;

설명

The dot product is 0, so the vectors are perpendicular and the similarity is 0.

예시 2
입력:
a = [1.0, 2.0, 3.0]
b = [2.0, 4.0, 6.0]

예상 출력:
expected = 1.0
입력:
std::vector<double> a = {1.0, 2.0, 3.0};
std::vector<double> b = {2.0, 4.0, 6.0};

예상 출력:
double expected = 1.0;
입력:
double[] a = new double[] {1.0, 2.0, 3.0};
double[] b = new double[] {2.0, 4.0, 6.0};

예상 출력:
double expected = 1.0;

설명

b is a times 2: same direction, so the similarity is 1 even though the lengths differ.

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.