2011-03-17 25 views
5

Bu basit olmalıdır Buna cevap gibi görünüyor, ama ben odunum değilim. Ben 1 2. ve 3. sütunlar X Y ve inci öğenin Z koordinatları orada NX3 matris bir matris var. Kökenden maddeye olan mesafeyi hesaplamak istiyorum. Vectorized olmayan bir formda bu kolaydır.nasıl gevreksiz bir matris Öklid uzunluğunu hesaplamak için?

mesafe = normu ([xyz]);

veya

mesafe = sqrt (x^2 + y^2 + z^2);

Ancak vectorized onun kadar basit değil oluştururlar. Bir matrisi normale geçirdiğinizde, artık Euclidean uzunluğunu döndürmez.

distance = norm (matrix); %

ve

mesafe = sqrt (x (çalışmaz.,: 1) * x (:, 1) + y (:., 2) * y (:, 2) + z (:, 3) * z (Bulunan:., 3)); % sadece dağınık görünüyor

Bunu yapmak için daha iyi bir yolu var mı?

cevap

14

bu deneyin:

 
>> 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

kullanarak,! =) – Phonon

3

Evet, var.

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

ben gitmek için yol distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2) olduğunu düşünüyorum. Matlab

Döngüler sadece çok yavaştır. Vektör işlemleri her zaman tercih edilir (emin olduğunuzdan eminim). Ek olarak, .^2 (öğe bilge karesi) kullanarak matrisinizin her sütununa iki kez bakmak zorunda kalmaz, bu daha da hızlı olur. Gerçekten

0

Çok zarif H2O

h2o.init() 
df1<-as.h2o(matrix1) 
df2<-as.h2o(matrix2) 
distance<-h2o.distance(df1,df2,"l2") 
#l2 for euclidean distance