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 本身不支持的情况下执行的其他一维操作。

于 2016-12-16T10:19:48.333 回答
2

如果第一个维度不是太大:

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