我想计算python中的K近邻。我应该使用什么库?
发布于 2011-04-06 20:00:07
我认为你应该使用scikit ann。
有一个关于最近的邻居here的很好的教程。
根据文档:
ann是由David M.Mount和Sunil Arya开发的近似最近邻(ANN)库(http://www.cs.umd.edu/~mount/ANN/)的SWIG生成的python包装器。ann提供了一个不可变的kdtree实现(通过ANN),它可以执行k-最近邻和近似k
发布于 2011-07-15 13:41:15
下面是一个比较scipy.spatial.cKDTree和pyflann.FLANN的脚本,你可以自己看看哪个更快。
import cProfile
import numpy as np
import os
import pyflann
import scipy.spatial
# Config params
dim = 4
data_size = 1000
test_size = 1
# Generate data
np.random.seed(1)
dataset = np.random.rand(data_size, dim)
testset = np.random.rand(test_size, dim)
def test_pyflann_flann(num_reps):
flann = pyflann.FLANN()
for rep in range(num_reps):
params = flann.build_index(dataset, target_precision=0.0, log_level='info')
result = flann.nn_index(testset, 5, checks=params['checks'])
def test_scipy_spatial_kdtree(num_reps):
flann = pyflann.FLANN()
for rep in range(num_reps):
kdtree = scipy.spatial.cKDTree(dataset, leafsize=10)
result = kdtree.query(testset, 5)
num_reps = 1000
cProfile.run('test_pyflann_flann(num_reps); test_scipy_spatial_kdtree(num_reps)', 'out.prof')
os.system('runsnake out.prof')发布于 2011-04-07 00:00:40
scipy.spatial.cKDTree是快速和可靠的。有关将其用于NN插值的示例,请参见SO上的(ahem) inverse-distance-weighted-idw-interpolation-with-python。
(如果你可以说例如:“我在3d中有1M个点,并且想要1k个新点的最近邻居”,你可能会得到更好的答案或代码示例。
找到邻居后,您想对他们做什么?)
https://stackoverflow.com/questions/5565935
复制相似问题