San*_*nda 22
我认为你应该使用scikit ann.
有一个关于最近neightbour一个很好的教程在这里.
根据文件:
ann是由David M. Mount和Sunil Arya开发的近似最近邻(ANN)库(http://www.cs.umd.edu/~mount/ANN/)的SWIG生成的python包装器.ann提供了一个不可变的kdtree实现(通过ANN),它可以执行k近邻和近似k
我写了一个脚本来比较FLANN和scipy.spatial.cKDTree,无法获得ANN包装器进行编译.您可以自己尝试一下,看看哪些适用于您的应用程序.对于我的FLANN测试用例,cKDTree的运行时间相当,FLANN的速度提高了约1.25倍.当我增加testSize时,FLANN比cKDTree快2倍.看起来像FLANN将更难以集成,具体取决于项目,因为它不是标准python包的一部分.
import cProfile
from numpy import random
from pyflann import *
from scipy import spatial
# Config params
dim = 4
knn = 5
dataSize = 1000
testSize = 1
# Generate data
random.seed(1)
dataset = random.rand(dataSize, dim)
testset = random.rand(testSize, dim)
def test1(numIter=1000):
'''Test tree build time.'''
flann = FLANN()
for k in range(numIter):
kdtree = spatial.cKDTree(dataset, leafsize=10)
params = flann.build_index(dataset, target_precision=0.0, log_level = 'info')
def test2(numIter=100):
kdtree = spatial.cKDTree(dataset, leafsize=10)
flann = FLANN()
params = flann.build_index(dataset, target_precision=0.0, log_level = 'info')
for k in range(numIter):
result1 = kdtree.query(testset, 5)
result2 = flann.nn_index(testset, 5, checks=params['checks'])
import cProfile
cProfile.run('test2()', 'out.prof')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32032 次 |
| 最近记录: |