2013-01-23 15 views
7

मेरे पास लगभग 144 अंक वाला क्षेत्र है। मैं जो हासिल करना चाहता हूं वह सभी लोगों के साथ एक बिंदु की दूरी को मापना और इसे सरणी में संग्रहीत करना है। मैं इसे सभी बिंदुओं के लिए करना चाहता हूं। यदि संभव हो तो मैं इस डेटा को इस तरह से स्टोर करना चाहता हूं कि कोई दोहराव न हो। और मुझे प्रश्न बनाने में सक्षम होना चाहिए- पुनरावृत्ति के बिना सभी बिंदुओं के बीच सभी दूरी, बिंदु संख्या 56 के लिए सभी दूरीों का योगएक दूसरे के साथ एक क्षेत्र में सभी बिंदुओं की दूरी की गणना

मेरे पास 3 * 144 सरणी है जिसमें दो स्तंभ हैं जो बिंदुओं के निर्देशांक संग्रहीत करते हैं ।

+0

मैं सिर्फ इस सवाल पर ध्यान X में सभी बिंदुओं के बीच दूरी देता है , और MATLAB में जोड़ी दूरी की गणना करने के लिए तीन तरीकों की तुलना के साथ इस उत्तर को एक लिंक देना चाहता था] (http://stackoverflow.com/a/19456458/2778484)। दूसरा सवाल बहुत भ्रमित है, लेकिन उत्तर जोड़ों की दूरी को संबोधित करता है, किसी भी आयाम में अंतिम विधि। – chappjc

उत्तर

6

सम्भावित समाधान (मैं आप कोई पुनरावृत्ति से क्या मतलब के साथ वास्तव में स्पष्ट है, हालांकि नहीं कर रहा हूँ):

X are your points with coordinates x = X(:,1), y = X(:,2) 


dist = sqrt(bsxfun(@minus,X(:,1),X(:,1)').^2 + bsxfun(@minus,X(:,2),X(:,2)').^2) 

तो

dist(i,j) is the euclidean distance between i and j 
निश्चित रूप से

मैट्रिक्स सममित है। आप आसानी से शामिल जटिलता को कम कर सकते हैं।

+0

दोहराव से मेरा मतलब था कि दूरी फॉर्म बिंदु ए से बी बी से ए के समान है, इसलिए इसे जिम्मेदार नहीं माना जाना चाहिए। – Vikram

+0

@ विक्रम, ठीक है, मैट्रिक्स वास्तव में सममित है। वैसे, अंकों की छोटी संख्या (144 के रूप में) के लिए, शायद यह अधिक क्रूर-बल-जैसी दृष्टिकोण स्मार्ट तरीकों से किसी भी तरह तेज है। इसे मात्र आजमाएं। – Acorbe

2

मान लें कि आपकी सरणी A है, जहां प्रत्येक कॉलम एक बिंदु के निर्देशांक संग्रहीत करता है। सभी बिंदु जोड़े के संयोजन (repetitions के बिना) प्राप्त करने के लिए, का उपयोग करें nchoosek:

pairs = nchoosek(1:size(A, 2), 2) 

फिर गणना Euclidean distance तो जैसे:

dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1)) 

आप Statistics Toolbox स्थापित किया है, तो आप pdist(A) बजाय के लिए उपयोग कर सकते हैं एक ही प्रभाव।

+0

मेरे पास पीडीआईस्ट फ़ंक्शन है। [4] [pdist (ए)] [4] में क्या खाता है? – Vikram

+0

@ विक्रम यह सिर्फ एक टाइपिंग त्रुटि है (मैंने 'pdist' आधिकारिक दस्तावेज़ीकरण के लिए हाइपरलिंक बनाने की कोशिश की)। यह 'pdist (ए)' होना चाहिए। फिक्स्ड। –

1

आप आँकड़े टूलबॉक्स है, और आप सरणी एक्स में अपने सभी डेटा है, तो अगर

D = pdist(X) 

सभी जोड़ो

+0

सबसे आसान समाधान यदि आप एक सममित दूरी मैट्रिक्स के बजाय त्रिकोणीय मैट्रिक्स के साथ रह सकते हैं (हालांकि ['squareform'] (http://www.mathworks.com/help/stats/squareform.html) आपको सभी तरह से प्राप्त कर सकता है) । +1 संदर्भ के लिए, [pdist' और अन्य "मैन्युअल" समाधानों की तुलना के लिए [इस अन्य पोस्ट का उत्तर देखें]] (http://stackoverflow.com/a/19456458/2778484)। – chappjc

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