选择合适的index类型
选择index类型并没有一套精准的法则可以依据,需要根据自己的实际情况选取。下面的几个问题可以作为选取index的参考。
是否需要精确的结果
如果需要,应该使用“Flat” 只有 IndexFlatL2 能确保返回精确结果。一般将其作为baseline与其他索引方式对比,以便在精度和时间开销之间做权衡。
不支持add_with_ids,如果需要,可以用“IDMap, Flat”。
支持GPU。
In [8]:
#导入faiss import sys sys.path.append('/home/maliqi/faiss/python/') import faiss #数据 import numpy as np d = 512 #维数 n_data = 2000 np.random.seed(0) data = [] mu = 3 sigma = 0.1 for i in range(n_data): data.append(np.random.normal(mu, sigma, d)) data = np.array(data).astype('float32') #ids, 6位随机数 ids = [] start = 100000 for i in range(data.shape[0]): ids.append(start) start += 100 ids = np.array(ids)
In [9]:
#不支持add_with_ids index = faiss.index_factory(d, "Flat") index.add(data) dis, ind = index.search(data[:5], 10) print(ind)
[[ 0 798 879