में निकटतम पड़ोसी मैं पाइथन में के-निकटतम पड़ोसी की गणना करना चाहता हूं। मुझे किस लाइब्रेरी का उपयोग करना चाहिए?के पाइथन
के पाइथन
उत्तर
मुझे लगता है कि आपको scikit ann का उपयोग करना चाहिए।
निकटतम नाइटबर here के बारे में एक अच्छा ट्यूटोरियल है।
प्रलेखन के अनुसार:
एन लगभग निकटतम पड़ोसी (एएनएन) लाइब्रेरी (http://www.cs.umd.edu/~mount/ANN/), डेविड एम माउंट और सुनील आर्य द्वारा विकसित करने के लिए एक बड़ा घूँट-उत्पन्न अजगर आवरण है। एन अपरिवर्तनीय kdtree कार्यान्वयन (एएनएन) के माध्यम से जो प्रदर्शन कर सकते हैं k-निकटतम पड़ोसी और अनुमानित कश्मीर
scipy.spatial.cKDTree तेजी से और ठोस है प्रदान करता है। एनएन इंटरपोलेशन के लिए इसका उपयोग करने के उदाहरण के लिए, एसओ पर (एहेम) inverse-distance-weighted-idw-interpolation-with-python देखें।
(अगर आप कहते हैं हो सकता है उदाहरण के लिए "मैं 3 डी में 1M अंक है, और k 1k नए अंक के = 5 निकटतम पड़ोसियों चाहते हैं", आपको बेहतर उत्तर या कोड उदाहरण मिल सकता है।
क्या आप के साथ करना चाहते हैं पड़ोसियों ने उन्हें एक बार पाया है?)
मैंने FLANN और scipy.spatial.cKDTree की तुलना करने के लिए एक स्क्रिप्ट लिखी, संकलन करने के लिए एएनएन रैपर नहीं मिला। आप अपने आवेदन के लिए क्या काम करेंगे यह देखने के लिए आप यह कोशिश कर सकते हैं। सीकेडीटी के पास फ्लैन के साथ मेरे टेस्ट केस के लिए एक तुलनात्मक रन टाइम था, FLANN ~ 1.25x तेज था। जब मैंने टेस्टसाइज़ FLANN बढ़ाया तो सीकेडीटी की तुलना में ~ 2x तेज था। ऐसा लगता है कि फ्लैगन परियोजना के आधार पर एकीकृत करना अधिक कठिन होगा क्योंकि यह मानक पायथन पैकेज का हिस्सा नहीं है।
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')
यह देशी रूप scipy में है कि तुम एक केडी पेड़ दृष्टिकोण करने के लिए देख रहे हैं: http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.KDTree.html#scipy.spatial.KDTree
+1 इस पुस्तकालय के साथ काम करने के लिए बहुत आसान है। –
+1, बहुत उपयोगी लिंक! उपयोगी लिंक के लिए – juanchopanza
एक – pylover