Python向量范数计算完全指南:方法、实例与最佳实践
这是文章《在Python中计算向量的范数-计算步骤》的第1部分(共3部分)。
向量的范数是指向量的长度或大小。有多种计算长度的方法。向量的范数是一个非负值。在本教程中,我们将学习如何计算向量的不同类型的范数。
向量x的范数被表示为:‖x‖。
向量的范数是其在向量空间中与原点的距离的衡量。
要计算范数,你可以使用Numpy或Scipy。两者都提供了用于计算范数的类似功能。
在本教程中,我们将介绍机器学习领域最常见的两种规范类型。
这些是:
- L1范数
- L2范数
如何计算向量的L1范数?
向量的L1范数也被称为曼哈顿距离或出租车范数。向量x的L1范数的符号表示为 ‖x‖₁。
要计算范数,你需要将向量的绝对值求和。
让我们举个例子来理解一下:
a = [1,2,3,4,5]
对于上述数组,L1范数将是:
1+2+3+4+5 = 15
让我们拿另一个例子来说明:
a = [-1,-2,3,4,5]
这个数组的L1范数是:
|-1|+|-2|+3+4+5 = 15
当计算两个向量的L1范数时,由于考虑绝对值,它们的结果是相同的。
Python 实现的L1范数
让我们看一下如何在Python中计算向量的L1范数。
使用Numpy
使用Numpy计算L1范数的Python代码如下:
from numpy import array
from numpy.linalg import norm
arr = array([1, 2, 3, 4, 5])
print(arr)
norm_l1 = norm(arr, 1)
print(norm_l1)
输出结果:
[1 2 3 4 5]
15.0
让我们尝试计算具有负数条目的数组,就像我们之前的例子一样。
from numpy import array
from numpy.linalg import norm
arr = array([-1, -2, 3, 4, 5])
print(arr)
norm_l1 = norm(arr, 1)
print(norm_l1)
输出结果:
[-1 -2 3 4 5]
15.0
使用Scipy计算L1范数
使用Scipy计算L1范数与上述Numpy实现并没有太大的区别。
相同的代码如下:
from numpy import array
from scipy.linalg import norm
arr = array([-1, -2, 3, 4, 5])
print(arr)
norm_l1 = norm(arr, 1)
print(norm_l1)
结果:
[-1 -2 3 4 5]
15.0
这段代码与Numpy的代码完全相似。
如何计算一个向量的L2范数?
向量x的L2范数的符号为‖x‖₂。
计算一个向量的L2范数,需要取该向量的每个值的平方求和的平方根。
向量的L2范数另一个名称是欧几里得距离。这在机器学习模型中经常用于计算错误。
均方根误差是模型实际输出与期望输出之间的欧几里得距离。
机器学习模型的目标是减少这个误差。
让我们考虑一个例子来理解它。
a = [1,2,3,4,5]
以上的L2范数为:
sqrt(1^2 + 2^2 + 3^2 + 4^2 + 5^2) = 7.416
L2范数始终是一个正数,因为我们在将值相加之前对其进行了平方。
Python的实现
Python 的实现如下:
from numpy import array
from numpy.linalg import norm
arr = array([1, 2, 3, 4, 5])
print(arr)
norm_l2 = norm(arr)
print(norm_l2)
结果如下:
[1 2 3 4 5]
7.416198487095663
在这里我们可以看到,默认情况下,norm方法返回L2范数。
结论
这个教程是关于如何使用Python计算L1和L2范数。我们使用了Numpy和Scipy库来计算这两种范数。希望你在学习过程中有所收获!