Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Cosine Similarity

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

Bạn sẽ học được gì

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

Đề bài

Xem bản dịch

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.

Ràng buộc

1 ≤ length ≤ 1,000

-1,000 ≤ each value ≤ 1,000

Ví dụ

Ví dụ 1
Đầu vào:
a = [1.0, 0.0]
b = [0.0, 1.0]

Kết quả mong đợi:
expected = 0.0
Đầu vào:
std::vector<double> a = {1.0, 0.0};
std::vector<double> b = {0.0, 1.0};

Kết quả mong đợi:
double expected = 0.0;
Đầu vào:
double[] a = new double[] {1.0, 0.0};
double[] b = new double[] {0.0, 1.0};

Kết quả mong đợi:
double expected = 0.0;

Giải thích

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

Ví dụ 2
Đầu vào:
a = [1.0, 2.0, 3.0]
b = [2.0, 4.0, 6.0]

Kết quả mong đợi:
expected = 1.0
Đầu vào:
std::vector<double> a = {1.0, 2.0, 3.0};
std::vector<double> b = {2.0, 4.0, 6.0};

Kết quả mong đợi:
double expected = 1.0;
Đầu vào:
double[] a = new double[] {1.0, 2.0, 3.0};
double[] b = new double[] {2.0, 4.0, 6.0};

Kết quả mong đợi:
double expected = 1.0;

Giải thích

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

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.