在Python中获取向量的1范数
我该如何在Python中计算两个向量的差的1范数,也就是||a - b||_1 = sum(|a_i - b_i|)
?
a = [1,2,3,4]
b = [2,3,4,5]
||a - b||_1 = 4
5 个回答
10
看起来你是在询问两个数组中成对元素之间差值的总和:
>>> A=[1,2,3,4]
>>> B=[2,3,4,5]
>>> sum(abs(a - b) for a, b in zip(A, B))
4
15
在NumPy中,对于两个向量 a
和 b
,这只是
numpy.linalg.norm(a - b, ord=1)
41
Python有强大的内置数据类型,但Python的列表并不是数学中的向量或矩阵。你可以用列表来做这些事情,但如果要进行复杂的运算,可能会觉得很麻烦。
如果你经常需要进行向量或矩阵的计算,行业标准是NumPy,这个库可能已经和你的操作系统一起安装好了,就像Python一样。
我也理解大家对你想做的事情感到困惑,但也许numpy.linalg.norm这个函数会对你有帮助:
>>> import numpy
>>> a = numpy.array([1, 2, 3, 4])
>>> b = numpy.array([2, 3, 4, 5])
>>> numpy.linalg.norm((a - b), ord=1)
4
下面我来展示一下它是如何工作的:
>>> a
array([1, 2, 3, 4])
>>> b
array([2, 3, 4, 5])
>>> (a - b)
array([-1, -1, -1, -1])
>>> numpy.linalg.norm((a - b))
2.0
>>> numpy.linalg.norm((a - b), ord=1)
4