背景

https://github.com/mariusmuja/flann

PyFlannFLANNpython 接口,FLANN (Fast Library for Approximate Nearest Neighbors) 是快速解决最近点搜类问题的库。

这一类问题是一个在尺度空间中寻找最近点的优化问题。问题描述如下:在尺度空间MM 中给定一个点集SS 和一个目标点qMq \in M,在SS 中找到距离qq 最近的点。很多情况下,MM 为多维的欧几里得空间,距离由欧几里得距离或曼哈顿距离决定。最近点搜索问题的快速解决在很多领域都有着重要意义,如:图像识别及分类、机器学习、文档查重、统计学和大数据等。当维度较高时需要考虑效率问题。PyFlann库提供了linear, kdtree, kmeans, composite, autotuned几种算法来更好的解决问题。

用法

参考:
文档: http://www.cs.ubc.ca/research/flann/uploads/FLANN/flann_manual-1.8.4.pdf
博客:https://blog.csdn.net/jcq521045349/article/details/78898971

1
2
3
4
5
6
7
8
9
10
11
12
from pyflann import *
from numpy import *
from numpy.random import *
dataset = rand(10000, 128)
testset = rand(1000, 128)
flann = FLANN()
params = flann.build_index(
dataset, algorithm="autotuned", target_precision=0.9, log_level="info")
print(params)
result, dists = flann.nn_index(testset, 5, checks=params["checks"])
print(result, dists)

注:导入pyflann时显示ImportError: No module named 'index'错误

参考:https://github.com/primetang/pyflann/issues/8

解决:2to3 -w <path to pyflann in python dist-packages>

联系作者