Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何计算无环矩阵的欧氏长度?_Matlab_Distance_Norm_Euclidean Distance_Vectorization - Fatal编程技术网

Matlab 如何计算无环矩阵的欧氏长度?

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));%看起来很乱 有更好的方法吗

看来这个问题的答案应该很简单,但我还是被难住了。我有一个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语法。