Легко Решено: 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. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.