2011-03-17 88 views
5

看來這個答案應該很簡單,但我很難過。我有一個N×3矩陣的矩陣,其中第一個第二和第三列是第n個項目的X Y和Z座標。我想計算從原點到項目的距離。在非矢量化的形式中,這很容易。如何計算無循環矩陣的歐幾里得長度?

distance = norm([x y z]);

距離= SQRT(X^2 + Y^2 + Z^2);

但是,在向量化的形式它並不那麼簡單。當你傳遞一個矩陣來規範它不再返回歐幾里德長度。

distance = norm(matrix); %不起作用

距離= SQRT(X(:,1)* X(:,1)+ Y(:,2)* Y(:,2)+ Z( :,3)* Z(:,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 2011-03-17 17:05:21

3

是的,有。

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

我覺得要走的路是distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2)

Matlab中的循環太慢了。矢量操作始終是首選(我相信你知道)。另外,使用.^2(逐元素平方)不需要兩次查看矩陣的每一列,所以這會更快。

0

使用H2O

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