选择合适的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 223 981 1401 1458 1174 919 26] [ 1 981 1524 1639 1949 1472 1162 923 840 300] [ 2 1886 37

选择Faiss的索引类型需考虑是否需要精确结果、内存开销及数据集大小。对于精确结果,使用""Flat"";在意内存,依次可选""HNSWx""、""... Flat""、""PCARx,...,SQ8""和""OPQx_y,...,PQx""。数据集小于1M时,用""...,IVFx,..."";1M-10M,用""...,IMI2x10,..."";10M-100M,用""...,IMI2x12,...""。"
111702580,10324370,基于OpenResty的动态服务路由方案,"['Nginx', 'OpenResty', '服务发现', 'Consul', '动态负载均衡']
6338

被折叠的 条评论
为什么被折叠?



