使用 Eigen 实现 CosineSimilarity 函数
1 简介
Eigen 是一个高效、易于使用的C++模板库,广泛应用于线性代数计算。本文将介绍如何使用 Eigen 实现 CosineSimilarity 函数,这是一种常用的相似度度量方法,可以用于衡量两个向量之间的相似程度。通过 Eigen 的矩阵运算和向量运算,我们可以快速、准确地实现 CosineSimilarity 函数,提高机器学习模型的训练和推理效率。
2 实现 NormalizeL2
bool NormalizeL2(std::vector<float> &input_data) {
if (input_data.empty()) {
return false;
}
// 将std::vector<float> 转换为 Eigen::Map
Eigen::Map<Eigen::VectorXf> eigen_vector(input_data.data(), static_cast<long>(input_data.size()));
eigen_vector.normalize();
return true;
}
3 实现 CosineSimilarity
double CosineSimilarity(const std::vector<T> &a, const std::vector<T> &b, bool use_normalize = false) {
if ((a.size() != b.size()) && (a.empty()) || (b.empty())) {
BDLOGGER_ERROR(
"The size of Vector A and B must be equal and greater than 0. But the size of vector A is {}, while the size of vector B is also {}.",
a.size(),
b.size())
return 0;
}
Eigen::Map<const Eigen::VectorXf> eigen_vector_a(a.data(), static_cast<long>(a.size()));
Eigen::Map<const Eigen::VectorXf> eigen_vector_b(b.data(), static_cast<long>(b.size()));
if (use_normalize) {
return eigen_vector_a.dot(eigen_vector_b) / (eigen_vector_a.norm() * eigen_vector_b.norm());
} else {
return eigen_vector_a.dot(eigen_vector_b);
}
}

浙公网安备 33010602011771号