我有一个faiss索引,希望在python脚本中使用一些嵌入。嵌入的选择应该由id来完成。由于faiss是用C++编写的,所以使用swig作为API。
我想我需要的函数是重建:
/** Reconstruct a stored vector (or an approximation if lossy coding)
*
* this function may not be defined for some indexes
* @param key id of the vector to reconstruct
* @param recons reconstucted vector (size d)
*/
virtual void reconstruct(idx_t key, float* recons) const;因此,我在python中调用此方法,例如:
vector = index.reconstruct(0)但这会导致以下错误:
向量= index.reconstruct(0)文件"lib/python3.8/site-packages/faiss/swigfaiss.py",行406,在replacement_reconstruct self.reconstruct_c(key,swig_ptr(x))文件“lib/python3.8/site-packages/faiss/swigfaiss.py”,行1897中,在重构返回_swigfaiss.IndexFlat_reconstruct(self,key,recon)中 TypeError:在方法‘IndexFlat_重构’中,'faiss::Index::idx_t‘python类型的参数2。
有人知道我的方法有什么问题吗?
发布于 2022-01-10 11:57:52
这是我手动找到的唯一方法。
import faiss
import numpy as np
a = np.random.uniform(size=30)
a = a.reshape(-1,10).astype(np.float32)
d = 10
index = faiss.index_factory(d,'Flat', faiss.METRIC_L2)
index.add(a)
xb = index.xb
print(xb.at(0) == a[0][0])输出:
True你可以用循环得到任何向量
required_vector_id = 1
vector = np.array([xb.at(required_vector_id*index.d + i) for i in range(index.d)])
print(np.all(vector== a[1]))输出:
Truehttps://stackoverflow.com/questions/70624600
复制相似问题