当前位置: 面试刷题>> 余弦相似度 (经典算法题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)); // 输出相似度值
```
### 附加信息
**码小课** 网站中有更多关于算法和数据结构的学习内容,包括但不限于向量计算、机器学习基础、大数据处理等内容,欢迎大家访问学习,提升编程技能。