各位读者大家好!在本教程中,我们将学习如何计算各种形式的向量范数。向量的长度或大小称为范数。有多种计算长度的方法。向量的范数是非负数。
向量的 L1 范数
L1 范数也称为曼哈顿距离或出租车范数。空间中向量的幅值之和就是 L1 范数。它用 ||x|| 表示 (其中 x 是向量),这是测量向量之间距离的最直接的方法,因为它是向量分量的绝对差的总和。所有向量分量在此范数中均等加权。
请参阅下图以可视化向量 x = (-7,5) 的 L1 范数
如图所示,L1 范数是起点 (0,0) 和终点 (-7,5) 之间的“距离”。||x|| =|-7| + |5| = 12 是 x 的 L1 范数。
在Python中实现L1范数
现在让我们使用 Python 中的 NumPy 库实现 L1 范数。我们将从导入np.linalg
模块开始并声明我们的向量 = [-8, 6, 0, -15]。
1
2
3
4
5
6
7
8
|
from numpy.linalg import norm x = [ - 8 , 6 , 0 , - 15 ] print ( "Example vector:" , x) #calculate l1 norm l1 = norm(x , 1 ) print ( "L1 norm =" , l1) |
我们从 np.linalg 模块导入了范数函数来计算向量的范数。对于 L1 范数,我们传递了一个附加参数 1,它表示要计算 L1 范数。如果没有给出附加参数,默认情况下,norm() 计算向量的 L2 范数。
输出:
1
2
|
Example vector: [ -8 6 0 -15] L1 norm = 29.0 |
结果包含向量的 L1 范数 |-8|+|6|+|0|+|-15| = 29.0
向量的 L2 范数
L2范数,也称为欧几里得范数,有些人也使用术语“ 2范数”,它是欧几里得空间中向量大小的度量。它被定义为向量各个元素的平方和的平方根。表示为 ||x|| 2 . L2 范数广泛应用于机器学习、工程和物理学等许多领域,用于各种应用,包括优化、正则化和归一化。请参阅下图以可视化向量 x = (7,5) 的 L2 范数
如图所示,L2 范数是起点 (0,0) 和目的地 (7,5) 之间的直接距离。||x|| 2 = sqrt(|7| 2 + |5| 2 ) = 8.60 是 x 的 L2 范数。
在Python中实现L2范数
variable x
我们将使用相同的方法计算 L2 范数np.linalg
,但这次我们在传递向量时不会向函数norm() 提供任何额外的参数。
1
2
3
4
5
6
|
from numpy.linalg import norm x = [ - 8 , 6 , 0 , - 15 ] print ( "Example vector:" , x) l2 = norm(x) print ( "L2 norm =" , "%.2f" % l2) |
我们过去常常"%.2f" % l1
将结果四舍五入到小数点后两位。
输出:
1
2
|
Example vector: [ -8 6 0 -15] L2 norm = 18.03 |
输出包含向量 x 的 L2 范数,计算公式为:
- ||x|| 2 = sqrt(|-8| 2 + |6| 2 +|0| 2 + |-15| 2 )
- ||x|| 2 = 开方(64+36+0+225) = 开方(325)
- ||x|| 2 = 18.02
请注意,L2 范数总是小于或等于 L1 范数
结论
在本教程中,我们介绍了 L1 和 L2 规范的基础知识以及与之相关的不同术语。我们还学习了如何使用 python 中的 numpy 库计算范数。numpy 中的模块np.linalg
提供了几个用于线性代数计算的函数,包括向量范数的计算。通过使用norm
中的函数np.linalg
,我们可以轻松计算给定向量的 L1 或 L2 范数。
值得注意的是,所使用的范数的选择取决于具体的应用和解决方案所需的属性。L1 范数通常用于需要对异常值不敏感的稳健解决方案的情况,而 L2 范数通常用于需要更平滑且更可预测的解决方案的情况。
另请阅读:如何用 Python 计算距离?[ 简单的分步指南 ]
参考
Numpy 线性代数库:https://numpy.org/doc/stable/reference/routines.linalg.html