MATLAB 中向量数组的向量范数
在 MATLAB 中的矩阵上调用 norm
时,它返回所谓的“矩阵范数”(标量值),而不是向量范数数组。有没有办法在不循环的情况下获得矩阵中每个向量的范数并利用 MATLAB 的向量化?
When calling norm
on a matrix in MATLAB, it returns what's known as a "matrix norm" (a scalar value), instead of an array of vector norms. Is there any way to obtain the norm of each vector in a matrix without looping and taking advantage of MATLAB's vectorization?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 element-wise 自行计算矩阵每列或行的范数定义为对给定矩阵维度进行运算的算术运算符 和函数(例如 SUM< /a> 和 MAX)。以下是计算矩阵
M
的一些按列范数的方法:通过更改
... 中的维度参数,可以轻松地使这些范数对行而不是列进行操作, 1
到...,2
。You can compute the norm of each column or row of a matrix yourself by using element-wise arithmetic operators and functions defined to operate over given matrix dimensions (like SUM and MAX). Here's how you could compute some column-wise norms for a matrix
M
:These norms can easily be made to operate on the rows instead of the columns by changing the dimension arguments from
...,1
to...,2
.从版本 2017b 开始,您可以使用 vecnorm。
From version 2017b onwards, you can use vecnorm.
现有的二范式实施可以得到改进。
abs(M).^2
将计算一大堆不必要的平方根,这些平方根会立即平方。更好的做法:
这可以有效地处理实数和复数 M。
使用
real()
确保sum
和sqrt
作用于实数(而不是虚部为 0 的复数)。The existing implementation for the two-norm can be improved.
abs(M).^2
is going to be calculating a whole bunch of unnecessary square roots which just get squared straightaway.Far better to do:
This efficiently handles real and complex M.
Using
real()
ensures thatsum
andsqrt
act over real numbers (rather than complex numbers with 0 imaginary component).对 P i 的答案的稍微补充:
如果您想要一个norm_2.m文件,则允许
或如此:
Slight addition to P i's answer:
allows for
or as this if you want a norm_2.m file: