2012-11-13 21 views
11

मेरे पास दो वैक्टर (एकल पंक्ति matrices) हैं। मान लें कि हम पहले से ही लंबाई len जानते हैं।यूक्लिडियन दूरी दो वैक्टरों (एकल पंक्ति मैट्रिक्स) के बीच दूरी

A = [ x1 x2 x3 x4 x5 .... ] 
B = [ y1 y2 y3 y4 y5 .... ] 

उनके बीच यूक्लिडियन दूरी की गणना करने के लिए सबसे तेज़ तरीका क्या है। मेरा पहला प्रयास है:

diff = A - B 
sum = 0 
for column = 1:len 
    sum += diff(1, column)^2 
distance = sqrt(sum) 

मेरे पास लाखों बार इस विधि के माध्यम से लूप है। तो, मैं कुछ ऐसा ढूंढ रहा हूं जो तेज़ और सही है। ध्यान दें कि मैं MATLAB का उपयोग नहीं कर रहा हूं और इसमें pdist2 API उपलब्ध नहीं है।

उत्तर

31
diff = A - B; 
distance = sqrt(diff * diff'); 

या

distance = norm(A - B); 
0
[val idx] = sort(sum(abs(Ti-Qi)./(1+Ti+Qi))); 

या

[val idx] = sort(sqrt(sum((Ti-Qi).^2))); 

वैल मूल्य है और IDX स्तंभ के मूल सूचकांक मूल्य इयूक्लिडियन दूरी लागू करने के बाद हल कर किया जा रहा है। (Matlab कोड)

0

जवाब @kol को जोड़ने के लिए,

diff = A - B; 
distance = sqrt(sum(diff * diff')) % sum of squared diff 

या

distance = norm(A-B); 
संबंधित मुद्दे