2011-03-17 15 views
5

ऐसा लगता है कि इसका उत्तर सरल होना चाहिए, लेकिन मैं स्टंप हो गया हूं। मेरे पास एनएक्स 3 मैट्रिक्स का मैट्रिक्स है जहां पहले दूसरे और तीसरे कॉलम एनएच आइटम के एक्स वाई और जेड निर्देशांक हैं। मैं मूल से वस्तु तक दूरी की गणना करना चाहता हूं। एक गैर वेक्टरकृत रूप में यह आसान है।बिना लूप के मैट्रिक्स की यूक्लिडियन लंबाई की गणना कैसे करें?

दूरी = मानक ([x y z]);

या

दूरी = sqrt (एक्स^2 + y^2 + z^2);

हालांकि, वेक्टरकृत रूप में यह इतना आसान नहीं है। जब आप मानदंड के लिए मैट्रिक्स पास करते हैं तो यह अब यूक्लिडियन की लंबाई को वापस नहीं लौटाता है।

दूरी = मानक (मैट्रिक्स); %

और

दूरी = sqrt (एक्स (काम नहीं करता है:।, 1) * x (:, 1) + y (:।, 2) * y (:, 2) + z (: 3) * जेड (:।, 3)); % बस गन्दा

क्या ऐसा करने का कोई बेहतर तरीका है?

उत्तर

14

इस प्रयास करें:

 
>> xyz = [1 2 3; 4 5 6; 7 8 9; 2 8 4] 

xyz = 

    1  2  3 
    4  5  6 
    7  8  9 
    2  8  4 

>> distance = sqrt(sum(xyz.^2, 2)) 

distance = 

      3.74165738677394 
      8.77496438739212 
      13.9283882771841 
      9.16515138991168 
+0

बहुत सुरुचिपूर्ण का उपयोग करना, वास्तव में! =) – Phonon

3

हाँ, वहां है।

distance = sqrt(sum(matrix.^2,2)); %# matrix is [x y z] 
0

मुझे लगता है कि जाने का रास्ता distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2) है।

मैटलैब में लूप्स बहुत धीमी हैं। वेक्टर ऑपरेशंस हमेशा पसंद किए जाते हैं (जैसा कि मुझे यकीन है कि आप जानते हैं)। इसके अतिरिक्त, .^2 (तत्व-वार स्क्वायरिंग) का उपयोग करके आपके मैट्रिक्स के प्रत्येक कॉलम को दो बार देखना नहीं है, इसलिए यह और भी तेज होगा।

0

H2O

h2o.init() 
df1<-as.h2o(matrix1) 
df2<-as.h2o(matrix2) 
distance<-h2o.distance(df1,df2,"l2") 
#l2 for euclidean distance 
संबंधित मुद्दे