Tous les défis
Facile 0 résolus 0 % de réussite

Cosine Similarity

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

Ce que vous allez apprendre

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

Problème

Afficher la traduction

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.

Contraintes

1 ≤ length ≤ 1,000

-1,000 ≤ each value ≤ 1,000

Exemples

Exemple 1
Entrée :
a = [1.0, 0.0]
b = [0.0, 1.0]

Sortie attendue :
expected = 0.0
Entrée :
std::vector<double> a = {1.0, 0.0};
std::vector<double> b = {0.0, 1.0};

Sortie attendue :
double expected = 0.0;
Entrée :
double[] a = new double[] {1.0, 0.0};
double[] b = new double[] {0.0, 1.0};

Sortie attendue :
double expected = 0.0;

Explication

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

Exemple 2
Entrée :
a = [1.0, 2.0, 3.0]
b = [2.0, 4.0, 6.0]

Sortie attendue :
expected = 1.0
Entrée :
std::vector<double> a = {1.0, 2.0, 3.0};
std::vector<double> b = {2.0, 4.0, 6.0};

Sortie attendue :
double expected = 1.0;
Entrée :
double[] a = new double[] {1.0, 2.0, 3.0};
double[] b = new double[] {2.0, 4.0, 6.0};

Sortie attendue :
double expected = 1.0;

Explication

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

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.