Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Similitud coseno

Mide cuánto se parecen dos vectores por el ángulo entre ellos, como hacen los buscadores con los embeddings.

Lo que aprenderás

  • Medir la similitud por el ángulo
  • Calcular productos escalares y normas
  • Entender cómo la búsqueda semántica compara textos

Problema

Ver original (inglés)

La similitud coseno compara la dirección de dos vectores e ignora su longitud. La búsqueda semántica la usa para encontrar textos con embeddings parecidos:

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

El resultado es 1 para la misma dirección, 0 para vectores perpendiculares y -1 para direcciones opuestas. Si alguno de los vectores es todo ceros, devuelve 0.

Implementa cosine_similarity(a, b).

Entrada

a, b: Dos listas de números con la misma longitud.

Salida

Devuelve la similitud coseno como número decimal.

Restricciones

1 ≤ longitud ≤ 1000

-1000 ≤ cada valor ≤ 1000

Ejemplos

Ejemplo 1
Entrada:
a = [1.0, 0.0]
b = [0.0, 1.0]

Salida esperada:
expected = 0.0
Entrada:
std::vector<double> a = {1.0, 0.0};
std::vector<double> b = {0.0, 1.0};

Salida esperada:
double expected = 0.0;
Entrada:
double[] a = new double[] {1.0, 0.0};
double[] b = new double[] {0.0, 1.0};

Salida esperada:
double expected = 0.0;

Explicación

El producto escalar es 0, así que los vectores son perpendiculares y la similitud es 0.

Ejemplo 2
Entrada:
a = [1.0, 2.0, 3.0]
b = [2.0, 4.0, 6.0]

Salida esperada:
expected = 1.0
Entrada:
std::vector<double> a = {1.0, 2.0, 3.0};
std::vector<double> b = {2.0, 4.0, 6.0};

Salida esperada:
double expected = 1.0;
Entrada:
double[] a = new double[] {1.0, 2.0, 3.0};
double[] b = new double[] {2.0, 4.0, 6.0};

Salida esperada:
double expected = 1.0;

Explicación

b es a por 2: misma dirección, así que la similitud es 1 aunque las longitudes sean distintas.

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.