2017-07-31 9 views
6

अनुकूलित करें मैं 1 केएम त्रिज्या के भीतर के सभी निकटतम पड़ोसियों को खोजने की कोशिश कर रहा हूं। यहाँ से निकटतम अंक खोज पेड़ का निर्माण और के लिए मेरी स्क्रिप्ट,निकटतम पड़ोसी खोज

from pysal.cg.kdtree import KDTree 

def construct_tree(s): 
    data_geopoints = [tuple(x) for x in s[['longitude','latitude']].to_records(index=False)] 
    tree = KDTree(data_geopoints, distance_metric='Arc', radius=pysal.cg.RADIUS_EARTH_KM) 
    return tree 

def get_neighbors(s,tree): 
    indices = tree.query_ball_point(s, 1) 
    return indices 

#Constructing the tree for search 
tree = construct_tree(data) 

#Finding the nearest neighbours within 1KM 
data['neighborhood'] = data['lat_long'].apply(lambda row: get_neighbors(row,tree)) 

है कि मैं क्या pysal पेज में पढ़ें, यह कहते हैं -

केडी पेड़ scipy में केडी पेड़ कार्यक्षमता के ऊपर एक बने । यदि scipy 0.12 या इससे अधिक का उपयोग scipy.spatial.cKDTree का उपयोग करता है, अन्यथा scipy.spatial.KDTree का उपयोग करता है।

मेरे मामले में यह सीकेडीटी का उपयोग करना चाहिए। यह नमूना डेटासेट के लिए ठीक काम कर रहा है, लेकिन tree.query_ball_point परिणामस्वरूप इंडेक्स की सूची देता है। प्रत्येक सूची में 100 तत्व होंगे। मेरे डेटा पॉइंट्स (2 मिलियन रिकॉर्ड्स) के लिए, यह कुछ बड़ा और बड़ा हो रहा है और कुछ बिंदु के बाद स्मृति समस्या के कारण बंद हो जाता है। इसे हल करने के बारे में कोई विचार?

+0

क्या आपने डेटाफ़्रेम में 'पड़ोस' डेटा संग्रहीत करने पर विचार किया है? 'networkx.Graph' दिमाग में आता है। –

+0

क्षमा करें इसके बारे में कभी नहीं सुना। क्या आप एक उदाहरण लिख सकते हैं? मैं कोशिश कर सकता हूँ कि हो सकता है। –

+0

https://networkx.github.io/ ग्राफ़ डेटा के साथ काम करने के लिए एक लाइब्रेरी है। आपके मामले में, मैं स्थान आईडी को कोष्ठक के रूप में संग्रहीत करता हूं और 1 किमी से कम स्थानों के बीच किनारों को जोड़ता हूं। दस्तावेज़ों में एक अच्छा ट्यूटोरियल शामिल है। –

उत्तर

0

बस अगर कोई इस के लिए कोई जवाब ढूंढ रहा है, तो मैंने इसे किसी समूह के लिए निकटतम पड़ोसियों को ढूंढकर हल किया है (tree.query_ball_point बैचों को संभाल सकता है) और डेटाबेस में लिख सकता है और फिर अगले समूह को संसाधित करने के बजाय, सब स्मृति में। धन्यवाद।

+0

आप "tree.query_ball_point बैचों को संभाल सकते हैं" बताते हैं। क्या आप कुछ उदाहरण कोड पोस्ट कर सकते हैं? – ximiki

+1

इस में, tree.query_ball_point (एस, 1)। एस एक सूची होना चाहिए। –

संबंधित मुद्दे