当前位置: 面试刷题>> 余弦相似度 (经典算法题500道)


### 题目描述补充 题目:**计算两个向量的余弦相似度** 余弦相似度是一种度量两个向量在方向上相似程度的指标,而不仅仅是它们在空间中的距离。余弦相似度的取值范围是[-1, 1],其中1表示两个向量完全相似(方向相同),-1表示两个向量完全不相似(方向相反),而0则表示两者正交(即垂直)。 给定两个非零向量A和B,其中A = [a1, a2, ..., an],B = [b1, b2, ..., bn],要求编写程序计算这两个向量的余弦相似度。 ### 示例代码 #### PHP 示例 ```php function cosineSimilarity($vectorA, $vectorB) { $dotProduct = 0; $normA = 0; $normB = 0; $length = count($vectorA); if ($length != count($vectorB)) { throw new Exception("Vectors must be of the same length."); } for ($i = 0; $i < $length; $i++) { $dotProduct += $vectorA[$i] * $vectorB[$i]; $normA += pow($vectorA[$i], 2); $normB += pow($vectorB[$i], 2); } $normA = sqrt($normA); $normB = sqrt($normB); return $dotProduct / ($normA * $normB); } // 示例 $vectorA = [1, 2, 3]; $vectorB = [2, 3, 4]; echo cosineSimilarity($vectorA, $vectorB); // 输出相似度值 ``` #### Python 示例 ```python import numpy as np def cosine_similarity(vectorA, vectorB): dot_product = np.dot(vectorA, vectorB) norm_A = np.linalg.norm(vectorA) norm_B = np.linalg.norm(vectorB) return dot_product / (norm_A * norm_B) # 示例 vectorA = np.array([1, 2, 3]) vectorB = np.array([2, 3, 4]) print(cosine_similarity(vectorA, vectorB)) # 输出相似度值 ``` #### JavaScript 示例 ```javascript function cosineSimilarity(vectorA, vectorB) { let dotProduct = 0; let normA = 0; let normB = 0; if (vectorA.length !== vectorB.length) { throw new Error("Vectors must be of the same length."); } for (let i = 0; i < vectorA.length; i++) { dotProduct += vectorA[i] * vectorB[i]; normA += vectorA[i] ** 2; normB += vectorB[i] ** 2; } normA = Math.sqrt(normA); normB = Math.sqrt(normB); return dotProduct / (normA * normB); } // 示例 const vectorA = [1, 2, 3]; const vectorB = [2, 3, 4]; console.log(cosineSimilarity(vectorA, vectorB)); // 输出相似度值 ``` ### 附加信息 **码小课** 网站中有更多关于算法和数据结构的学习内容,包括但不限于向量计算、机器学习基础、大数据处理等内容,欢迎大家访问学习,提升编程技能。
推荐面试题