6

似乎这个问题的答案应该很简单,但我很难过。我有一个 Nx3 矩阵的矩阵,其中第 2 列和第 3 列是第 n 项的 XY 和 Z 坐标。我想计算从原点到项目的距离。在非矢量化形式中,这很容易。

距离=规范([xyz]);

或者

距离 = sqrt(x^2+y^2+z^2);

但是,在矢量化形式中,它并不是那么简单。当您将矩阵传递给 norm 时,它不再返回欧几里得长度。

距离 = 范数(矩阵);% 不起作用

距离 = sqrt(x(:,1).*x(:,1)+y(:,2).*y(:,2)+z(:,3).*z(:,3)); %只是看起来很乱

有一个更好的方法吗?

4

5 回答 5

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

>> 距离 = sqrt(sum(xyz.^2, 2))

距离 =

          3.74165738677394
          8.77496438739212
          13.9283882771841
          9.16515138991168
于 2011-03-17T17:01:53.670 回答
3

就在这里。

distance = sqrt(sum(matrix.^2,2)); %# matrix is [x y z]
于 2011-03-17T16:59:54.780 回答
1

获得矩阵向量的范数

vecnorm( A, p, dim)

已在 MATLAB 2017b 中引入。对于给定的问题,欧几里得距离(L2 范数),设置 p = 2 和逐行操作,设置 dim = 2。

vecnorm( X, 2, 2)
于 2019-09-04T13:56:30.053 回答
0

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

Matlab 中的循环太慢了。向量操作总是首选(我相信你知道)。此外,使用.^2(element-wise squareing) 不必查看矩阵的每一列两次,因此这会更快。

于 2011-03-17T17:03:58.670 回答
-1

使用水

h2o.init()
df1<-as.h2o(matrix1)
df2<-as.h2o(matrix2)
distance<-h2o.distance(df1,df2,"l2")
#l2 for euclidean distance
于 2017-08-20T14:15:07.080 回答