Matlab 如何计算无环矩阵的欧氏长度?
看来这个问题的答案应该很简单,但我还是被难住了。我有一个Nx3矩阵,其中第1列、第2列和第3列是第n项的X、Y和Z坐标。我想计算从原点到项目的距离。在非矢量形式中,这很容易 距离=范数([x y z]) 或 距离=sqrt(x^2+y^2+z^2) 然而,矢量化的形式并不是那么简单。将矩阵传递给范数时,它不再返回欧几里德长度 距离=标准(矩阵);%不起作用 及 距离=sqrt(x(:,1)。*x(:,1)+y(:,2)。*y(:,2)+z(:,3)。*z(:,3));%看起来很乱 有更好的方法吗?是的,有Matlab 如何计算无环矩阵的欧氏长度?,matlab,distance,norm,euclidean-distance,vectorization,Matlab,Distance,Norm,Euclidean Distance,Vectorization,看来这个问题的答案应该很简单,但我还是被难住了。我有一个Nx3矩阵,其中第1列、第2列和第3列是第n项的X、Y和Z坐标。我想计算从原点到项目的距离。在非矢量形式中,这很容易 距离=范数([x y z]) 或 距离=sqrt(x^2+y^2+z^2) 然而,矢量化的形式并不是那么简单。将矩阵传递给范数时,它不再返回欧几里德长度 距离=标准(矩阵);%不起作用 及 距离=sqrt(x(:,1)。*x(:,1)+y(:,2)。*y(:,2)+z(:,3)。*z(:,3));%看起来很乱 有更好的方法吗
distance = sqrt(sum(matrix.^2,2)); %# matrix is [x y z]
试试这个:
>> 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
>>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(总和(xyz.^2,2))
距离=
3.74165738677394
8.77496438739212
13.9283882771841
9.16515138991168
我认为方法是
distance=sqrt(矩阵(:,1)。^2+矩阵(:,2)。^2+矩阵(:,3)。^2)
Matlab中的循环太慢了。向量运算总是首选(我相信你知道)。此外,使用^2
(元素平方)不必查看矩阵的每一列两次,因此速度更快。使用h2O
h2o.init()
df1<-as.h2o(matrix1)
df2<-as.h2o(matrix2)
distance<-h2o.distance(df1,df2,"l2")
#l2 for euclidean distance
h2o.init()
df1求矩阵向量的范数
vecnorm( A, p, dim)
已在MATLAB 2017b中介绍。
对于给定的问题,欧几里得距离(L2范数)设为p=2,行操作设为dim=2
vecnorm( X, 2, 2)
这甚至不是有效的MATLAB语法。