似乎答案应该很简单,但我很难过。我有一个Nx3矩阵矩阵,其中第1和第3列是第n项的X Y和Z坐标。我想计算从原点到物品的距离。在非矢量化形式中,这很容易。
距离= norm([x y z]);
或
距离= sqrt(x ^ 2 + y ^ 2 + z ^ 2);
然而,在矢量化形式中它并非如此简单。当你将矩阵传递给规范时,它不再返回欧几里德长度。
距离=标准(矩阵); %不起作用
和
距离= sqrt(x(:,1)。* x(:,1)+ y(:,2)。* y(:,2)+ z(:,3)。* z(:,3 )); %只是看起来很乱
有更好的方法吗?
答案 0 :(得分: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 >> distance = sqrt(sum(xyz.^2, 2)) distance = 3.74165738677394 8.77496438739212 13.9283882771841 9.16515138991168
答案 1 :(得分:3)
是的,有。
distance = sqrt(sum(matrix.^2,2)); %# matrix is [x y z]
答案 2 :(得分:1)
获得矩阵向量的范数
vecnorm( A, p, dim)
已在MATLAB 2017b中引入。 对于给定的问题,欧几里得距离(L2范数)设置为p = 2,行操作设置为dim = 2。
vecnorm( X, 2, 2)
答案 3 :(得分:0)
我认为要走的路是distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2)
。
Matlab中的循环太慢了。矢量操作总是首选(我相信你知道)。此外,使用.^2
(逐元素平方)不必查看矩阵的每一列两次,因此速度会更快。
答案 4 :(得分:0)
使用h2O
goodFeaturesToTrack