HNSW 最小复现 demo
纯 numpy 实现的 HNSW 索引,用于配合文章 《向量索引深度:HNSW、DiskANN、SPANN 原理对比》 演示算法行为。
依赖
- Python 3.9+
- numpy >= 1.24
python -m venv .venv
source .venv/bin/activate
pip install numpy运行
python bench.py预期输出:
n=1000, d=64, nq=50, k=10
Build: 1.xx s, Query: 0.xx s (xx QPS)
Recall@10 = 0.95+
文件
hnsw_numpy.py:HNSW 核心实现(约 120 行),包括分层插入、启发式选邻居、贪心查询。bench.py:对 1000 个 64 维随机向量建索引,和暴力搜索对比 Recall@10。
调参实验
修改 bench.py 里的
HNSW(d=d, M=8, efC=100, efS=50):
- 将
efS调到 10,观察召回率下降; - 将
M调到 4,观察高召回段的恶化; - 将
efC调到 20,观察构建期图质量的变化。