6

これに対する答えは簡単なはずですが、私は困惑しています。私はNx3行列の行列を持っています.1列目と2列目と3列目はn番目のアイテムのXY座標とZ座標です。原点からアイテムまでの距離を計算したい。ベクトル化されていない形式では、これは簡単です。

距離 = ノルム ([xyz]);

また

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

ただし、ベクトル化された形式ではそれほど単純ではありません。行列をノルムに渡すと、ユークリッド長が返されなくなりました。

距離 = ノルム (行列); %動作しません

距離 = 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 に答える
0

進むべき道は だと思いますdistance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2)

Matlab のループは遅すぎます。ベクトル演算は常に優先されます (ご存知のとおり)。さらに、.^2(要素ごとの二乗) を使用すると、行列の各列を 2 回調べる必要がないため、さらに高速になります。

于 2011-03-17T17:03:58.670 に答える