python 的 faiss.normalize_L2() 在 C++ 中的等价物是什么?

What is the equivalent of python's faiss.normalize_L2() in C++?

我想在 C++ 中使用 FAISS 对 100k 面部嵌入执行相似性搜索。 对于距离计算器,我想使用余弦相似度。为此,我选择 faiss::IndexFlatIP 。但是根据文档,我们需要在将向量添加到索引之前对其进行归一化。文档在 python 中建议使用以下代码:

index = faiss.IndexFlatIP(dimensions)
faiss.normalize_L2(embeddings)

但是当我想在 C++ 中实现同样的功能时,我注意到我在 C++ 中找不到任何类似于 python faiss.normalize_L2() 中的函数。 谁能帮忙? 提前致谢。

您可以构建和使用 Faiss 库的 C++ 接口(参见 this)。

如果您只想在 C++ 中对向量进行 L2 规范化:

std::vector<float> data;

float sum = 0;
for (auto item : data) sum += item * item;

float norm = std::sqrt(sum);
for (auto &item : data) item /= norm;