矢量规范的矢量数组在MATLAB中

Ame*_*ina 19 arrays matlab normalization matrix vectorization

norm在MATLAB中调用矩阵时,它返回所谓的"矩阵范数"(标量值),而不是矢量范数数组.有没有办法在没有循环的情况下获得矩阵中每个向量的范数并利用MATLAB的向量化?

gno*_*ice 26

您可以使用逐元算术运算符和定义为在给定矩阵维度(如SUMMAX)上运算的函数来自己计算矩阵的每列或每行的范数.以下是如何计算矩阵的一些列式规范M:

twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column
pNorm = sum(abs(M).^p,1).^(1/p);  %# The p-norm of each column (define p first)
infNorm = max(M,[],1);            %# The infinity norm (max value) of each column
Run Code Online (Sandbox Code Playgroud)

通过将dimension参数更改为to,可以轻松地使这些规范对行而不是列...,1进行操作...,2.

  • 也许你应该明确指定SUM和MAX操作的维度,这样就可以更容易地切换到行方式... (4认同)
  • 如果M包含任何非实数,则可能需要M.*conj(M) (3认同)
  • 如果`M`只包含实数,你可以用'twoNorm`替换'abs(M)`和'M`作为`.^ 2`有效地消除任何负号. (2认同)

Xas*_*ser 5

从2017b版本开始,您可以使用vecnorm