余弦相似度用来衡量两个向量的相关程度,当两个向量长度有一个为 0 时,余弦相似度 为 0。两个向量长度同时为 0 时,余弦相似度为 1。编写函数 cosine_Similarity 返回二维平面 上两个向量的余弦相似度。用c++编写
时间: 2025-06-28 09:15:50 浏览: 6
### C++ 实现计算两个二维向量的余弦相似度
为了实现一个能够安全处理特殊情况(如向量长度为零)的 `cosine_similarity` 函数,在C++中可以采用结构化异常处理机制或返回特定值来表示错误情况。以下是具体实现方法:
```cpp
#include <iostream>
#include <cmath> // For sqrt function
double cosine_similarity(const std::vector<double>& vec1, const std::vector<double>& vec2) {
double dot_product = 0.0;
double magnitude_vec1 = 0.0;
double magnitude_vec2 = 0.0;
if (vec1.size() != vec2.size()) {
throw std::invalid_argument("Vectors must be of the same dimension.");
}
for (size_t i = 0; i < vec1.size(); ++i) {
dot_product += vec1[i] * vec2[i];
magnitude_vec1 += pow(vec1[i], 2);
magnitude_vec2 += pow(vec2[i], 2);
}
// Check for zero-length vectors to avoid division by zero.
if (magnitude_vec1 == 0 || magnitude_vec2 == 0) {
return -1; // Indicate an error or undefined result with a special value.
}
double magnitudes_product = sqrt(magnitude_vec1) * sqrt(magnitude_vec2);
return dot_product / magnitudes_product;
}
```
此代码片段定义了一个名为 `cosine_similarity` 的函数,该函数接受两个参数作为输入:`vec1` 和 `vec2` 是两个相同维度的一维浮点数向量。如果任意向量的模长为零,则通过返回 `-1` 来指示未定义的结果[^1]。
当遇到不同尺寸的向量时,抛出异常以防止非法操作;对于合法输入则继续执行其余逻辑,最终输出两者的余弦相似度得分[^2]。
#### 处理特殊情形
针对可能存在的零向量问题,上述实现了预防措施,即在计算之前先检测分母是否为零,并采取适当的动作避免程序崩溃。这里选择了简单地返回负数值作为标志位之一,实际应用可根据需求调整这一行为模式[^3]。
阅读全文
相关推荐


















