आर में दो बिंदु पैटर्न के बीच दूसरा निकटतम पड़ोसी कैसे प्राप्त करें?


12

आर में दो बिंदु पैटर्न के बीच दूसरे निकटतम पड़ोसी के लिए दूरी प्राप्त करने का एक तरीका है? स्पैस्टेट पैकेज में एक फ़ंक्शन है जिसे nncross कहा जाता है लेकिन यह केवल दो पैटर्न के बीच निकटतम पड़ोसियों पर लागू होता है और मुझे दूसरे निकटतम पड़ोसियों के लिए दूरी की आवश्यकता होती है।

जवाबों:


9

पैकेज getN में फ़ंक्शन get.knnx बिंदु पैटर्न में एन-निकटतम पड़ोसियों की गणना कर सकता है।

x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)

अब nn $ nn.index एक ऐसा मैट्रिक्स है जो nn $ nn.index [i, j] दो निकटतम पड़ोसियों के X1 को पंक्ति में x2 में पंक्तिबद्ध करने के लिए है - सॉर्ट किया गया ताकि निकटतम [i, 1] और अगला पड़ोसी [i, 2] है।

यह फ़ंक्शन आपके लिए दूरियां भी लौटाता है, और बहुत तेज़ खोजों के लिए स्थानिक अनुक्रमितों की गणना करने के लिए कुछ विकल्प हैं।


धन्यवाद। हालांकि एक समस्या का एक सा में भाग गया। मेरा डेटा वर्ग 'ppp' का है (स्पैस्टेट के साथ उपयोग के लिए)। जब मैं इसे get.knnw में प्लग करता हूं, तो मुझे निम्न त्रुटि मिलती है> get.knnx (rp, ponderosa, 2) में त्रुटि: सूचियों को .C
RK

बस अपने ppp ऑब्जेक्ट पर as.data.frame का उपयोग करके निर्देशांक प्राप्त करें।
स्पेल्डमैन

क्या nndist और nnwhich भी इस कार्य के लिए तैयार होंगे? बस आज r-sig-geo सूची में इन दो कार्यों पर गौर किया ...
रोमन लुसट्रिक

nndist और nnwhich केवल एक बिंदु पैटर्न के भीतर निकटतम दूरी की गणना करते हैं (जो कि get.knn करता है), एक प्रकार के बिंदुओं से दूसरे प्रकार के बिंदुओं तक नहीं (जो कि get.knnx करता है)। इसके अलावा, अगर आप एल्गोरिथ्म = "kd_tree" का उपयोग करते हैं तो get.knn दोगुना तेज़ होता है।
13

@Spacedman समझ गया। धन्यवाद दोस्त। मैंने सिर्फ क्रॉसडिस्ट को देखा। यह get.knnx की तरह काम करने लगता है। इसे भी आजमाएंगे। मैंने आपकी टिप्पणी पढ़ने से पहले cbind का उपयोग करना और फिर X और Y निर्देशांक प्राप्त करना समाप्त कर दिया। बहुत बहुत धन्यवाद। यहाँ नौसिखिया। ज्यादातर एक पायथन लड़का है।
आरके

6

मुझे अभी पता चला है कि स्पैस्टेट में एक क्रॉसडिस्ट फ़ंक्शन है।

विवरण

दो अलग-अलग डेटासेटों से ली गई 'चीजों' के जोड़े के बीच की दूरी की गणना करता है।

यह इनपुट के रूप में दो बिंदु पैटर्न X और Y लेता है, और मैट्रिक्स को लौटाता है जिसकी [i, j] प्रविष्टि X [i] से Y [j] तक की दूरी है। क्रॉसडिस्ट का उपयोग करके दूसरे निकटतम पड़ोसियों को प्राप्त करने के लिए:

xdistances <- crossdist(X, Y)  #Get all cross distances    

nn = numeric() 
for (i in 1:nrow(X)) {   
  xdistance <- sort(xdistances[i,], partial=2)[2]   
  nn <- append(nn, xdistance)
}

मुझे पता है कि मैंने पहले ही स्पाइडरमैन के जवाब को स्वीकार कर लिया है लेकिन मैं इसे साझा करना चाहूंगा कि मैंने इसे दूसरे तरीके से कैसे किया।


0

पैकेज के कार्य nndistमें spatstatएक तर्क है kजो पड़ोसियों के आदेश को निर्धारित करता है। दूसरा निकटतम पड़ोसी दूरी पाने के लिए, का उपयोग करें k=2। पहले और दूसरे दोनों पड़ोसी पाने के लिए, का उपयोग करें k=1:2

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.