How to calculate Euclidean length of a matrix without loops?

15,810

Solution 1

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

Solution 2

Yes, there is.

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

Solution 3

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)
Share:
15,810
Miebster
Author by

Miebster

Updated on June 18, 2022

Comments

  • Miebster
    Miebster almost 2 years

    It seems like the answer to this should be simple, but I am stumped. I have a matrix of Nx3 matrix where there 1st 2nd and 3rd columns are the X Y and Z coordinates of the nth item. I want to calculate the distance from the origin to the item. In a non vectorized form this is easy.

    distance = norm([x y z]);

    or

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

    However, in vectorized form its not so simple. When you pass a matrix to norm it no longer returns the Euclidean length.

    distance = norm(matrix); %doesn't work

    and

    distance = sqrt(x(:,1).*x(:,1)+y(:,2).*y(:,2)+z(:,3).*z(:,3)); %just seems messy

    Is there a better way to do this?