24

私は3列、n行の行列を持っています:

[ a,b,c;
  d,e,f;
  g,h,i; ]

各行にノルム関数を適用し、ノルム1xnを含む行列を取得したいと考えています。

[ norm([a,b,c]);
  norm([d,e,f]);
  norm([g,h,i]); ]

forループでこれを行うことができますが、より良い方法はありますか?

4

3 に答える 3

42

どうですか

 norms = sqrt(sum(A.^2,1))

また

 norms = sqrt(sum(A.^2,2))?

座標が行または列のどちらであるかによって異なります。

于 2012-11-13T17:28:28.733 に答える
3

読みやすさがパフォーマンスよりも重要な考慮事項である場合は、次のことも検討してください。

norms = cellfun(@norm,num2cell(A,2));

このパターンは、MATLAB がネイティブにサポートしていない場合に、実行したい 1 つの次元に沿った他の操作にも適応できます。

于 2016-12-16T10:19:48.333 に答える
2

最初の次元が大きすぎない場合:

norms = sqrt(diag(A * A'));
于 2012-11-13T21:40:47.247 に答える