How to calculate Euclidean length of a matrix without loops?

假如想象 提交于 2019-12-05 07:58:33

Try this:

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

Yes, there is.

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

To obtain the norms of vectors of a matrix

vecnorm( A, p, dim)

has been introduced in MATLAB 2017b. For the given question the Euclidian Distance (L2 norm), set p = 2 , and row-wise operations, set dim = 2.

vecnorm( X, 2, 2)

I think the way to go is distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2).

Loops in Matlab are just too slow. Vector operations are always preferred (as I'm sure you know). Additionally, using .^2 (element-wise squaring) does not have to look each column of your matrix twice, so this would be even faster.

Using h2O

h2o.init()
df1<-as.h2o(matrix1)
df2<-as.h2o(matrix2)
distance<-h2o.distance(df1,df2,"l2")
#l2 for euclidean distance
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!