Получить 1-норму вектора в Python - PullRequest
17 голосов
/ 20 мая 2009

Как вычислить 1-норму разности двух векторов, ||a - b||_1 = sum(|a_i - b_i|) в Python?

a = [1,2,3,4]  
b = [2,3,4,5]

||a - b||_1 = 4  

Ответы [ 4 ]

25 голосов
/ 20 мая 2009

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
9 голосов
/ 20 мая 2009

В NumPy для двух векторов a и b это просто

numpy.linalg.norm(a - b, ord=1)
6 голосов
/ 20 мая 2009

Вы, похоже, запрашиваете сумму разностей между парными компонентами двух массивов:

>>> A=[1,2,3,4]
>>> B=[2,3,4,5]
>>> sum(abs(a - b) for a, b in zip(A, B))
4
2 голосов
/ 20 мая 2009

Не понятно, что именно здесь требуется, но вот мое предположение

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)
...