61 lines
1.2 KiB
Markdown
61 lines
1.2 KiB
Markdown
```shell
|
|
conda create -n faiss python=3.10 -y
|
|
conda activate faiss
|
|
conda install -c pytorch faiss-cpu
|
|
```
|
|
|
|
|
|
API 解释
|
|
```py
|
|
import numpy as np
|
|
import faiss
|
|
|
|
# FLATL2
|
|
index = faiss.IndexFlatL2(d)
|
|
index.add(xb)
|
|
D, I = index.search(xq, k)
|
|
|
|
# FlatIP
|
|
index = faiss.IndexFlatIP(d)
|
|
index.add(xb2)
|
|
D, I = index.search(xq2, k)
|
|
|
|
# IDMap
|
|
base = faiss.IndexFlatL2(d)
|
|
index = faiss.IndexIDMap(base)
|
|
index.add_with_ids(xb, ids)
|
|
D, I = index.search(xq, k)
|
|
|
|
# HNSWFlat
|
|
index = faiss.IndexHNSWFlat(d, M)
|
|
index.hnsw.efSearch = ef_search
|
|
index.add(xb)
|
|
D, I = index.search(xq, k)
|
|
|
|
# IVFFlat
|
|
quantizer = faiss.IndexFlatL2(d)
|
|
index = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)
|
|
safe_train(index, xb, "IndexIVFFlat")
|
|
index.add(xb)
|
|
index.nprobe = nprobe
|
|
D, I = index.search(xq, k)
|
|
|
|
# PQ
|
|
index = faiss.IndexPQ(d, M, nbits)
|
|
safe_train(index, xb, f"IndexPQ(M={M}, nbits={nbits})")
|
|
index.add(xb)
|
|
D, I = index.search(xq, k)
|
|
|
|
# IVFPQ
|
|
quantizer = faiss.IndexFlatL2(d)
|
|
index = faiss.IndexIVFPQ(quantizer, d, nlist, M, nbits)
|
|
safe_train(index, xb, f"IndexIVFPQ(nlist={nlist}, M={M}, nbits={nbits})")
|
|
index.add(xb)
|
|
index.nprobe = nprobe
|
|
D, I = index.search(xq, k)
|
|
|
|
# LSH
|
|
index = faiss.IndexLSH(d, nbits)
|
|
index.add(xb)
|
|
D, I = index.search(xq, k)
|
|
``` |