PyFlann 使用方法
PyFlann
其实是 FLANN
的 python
接口,当前支持python2 和 python3。FLANN
的意思是Fast Library for Approximate Nearest Neighbors
,也就是快速解决最近点搜类问题的库。
这一类问题,是一个在尺度空间中寻找最近点的优化问题。问题描述如下:在尺度空间M中给定一个点集S和一个目标点q ∈ M,在S中找到距离q最近的点。很多情况下,M为多维的欧几里得空间,距离由欧几里得距离或曼哈顿距离决定。
最近点搜索问题的快速解决在很多领域都有着重要意义,如:图像识别及分类、机器学习、文档查重、统计学和大数据等。但是,当这个维度很高的时候,解决起来是一个相当困难的工作。这导致很多研究者开始对更好的解决这一问题产生了兴趣。这个库提供了linear, kdtree, kmeans, composite, autotuned
几种算法来更好的解决问题。
安装
pip安装
pip install pyflann
源码安装
git clone https://github.com/primetang/pyflann.git
cd pyflann
[sudo] python setup.py install
使用
pyflann
包 提供了一个名为 FLANN 的类,来负责执行最近点搜索这个具体的操作。这个类包含如下的函数。
def build_index(self, pts, **
kwargs)
这个方法按照提交的算法,构建内部的数据结构排列,来加快后续的查找,如果需要多次查找的话,使用这种方法还是很棒的。它经常与方法 def nn_index(self, qpts, num_neighbors = 1, **kwargs)
共同使用。
pts 是数据集,必须是 numpy
的 2D
数组或 matrix
,用 row
优先方式存储。
**
kwargs 是一组不定的参数,首先包含一个参数 algorithm
,然后根据 algorithm
参数的不同,后续的参数也是不同的,总共有如下几种情况。
flann = pyflann.FLANN()
# 初始化 dataset
params = flann.build_index(dataset, algorithm = 'linear')
params = flann.build_index(dataset, algorithm = 'kdtree', trees)
params = flann.build_index(dataset, algorithm = 'autotuned',
target_precision, build_weight, memory_weight, sample_fraction)
params = flann.build_index(dataset, algorithm =