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;
我想在 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;