赞
踩
1.faiss.IndexFlatL2
IndexFlatL2索引方式
为向量集构建IndexFlatL2索引,它是最简单的索引类型,只执行强力L2距离搜索
index = faiss.IndexFlatL2(d) # build the index
import mkl import math import time import faiss import numpy as np d = 768 # 向量维数 data = [[i] * d for i in range(2000)] data = np.array(data).astype('float32') # 注意,只能插入float32类型的向量 ids = np.arange(0, 2000) data_length = len(ids) # 自定义向量的Id nlist = int(4 * math.sqrt(data_length)) # 聚类中心的个数 time1 = time.time() quantizer = faiss.IndexFlatL2(d) # 内部的索引方式依然不变 print("quantizer:",quantizer) # 打印结果:quantizer <faiss.swigfaiss_avx2.IndexFlatL2; proxy of <Swig Object of type 'faiss::IndexFlatL2 *' at 0x7f77660abb10> > index = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2) # 倒排索引 index.train(data) # 注意,倒排索引一定要进行train index.add_with_ids(data, ids) print(index.is_trained) time2 = time.time() print(f'构建索引插入数据的时间为{time2 - time1}') query_vector = np.array([[1] * 768]).astype('float32') dis, ind = index.search(query_vector, 1) # 1代表返回的结果数 print(f'全1向量的最近的向量id为{ind}') print(dis)
打印结果:
quantizer <faiss.swigfaiss_avx2.IndexFlatL2; proxy of <Swig Object of type ‘faiss::IndexFlatL2 *’ at 0x7f77660abb10> >
WARNING clustering 2000 points to 178 centroids: please provide at least 6942 training points
True
构建索引插入数据的时间为0.11389470100402832
全1向量的最近的向量id为[[1]]
[[0.]]
(torch)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。