Получить 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 ответов
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
В NumPy, для двух векторов a
а также b
, это просто
numpy.linalg.norm(a - b, ord=1)
Похоже, вы запрашиваете сумму различий между парными компонентами двух массивов:
>>> A=[1,2,3,4]
>>> B=[2,3,4,5]
>>> sum(abs(a - b) for a, b in zip(A, B))
4
Не понятно, что именно здесь требуется, но вот мое предположение
a=[1,2,3,4]
b=[2,3,4,5]
def a_b(a,b):
return sum(map(lambda a:abs(a[0]-a[1]), zip(a,b)))
print a_b(a,b)
Используя Numpy, вы можете вычислить любую норму между двумя векторами, используя пакет линейной алгебры.
import numpy as np
a = np.array([[2,3,4])
b = np.array([0,-1,7])
# L1 Norm
np.linalg.norm(a-b, ord=1)
# L2 Norm
np.linalg.norm(a-b, ord=2)
# L3 Norm
np.linalg.norm(a-b, ord=3)
# Ln Norm
np.linalg.norm(a-b, ord=n)
Пример: