2009-05-20 2 views
13

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

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

||a - b||_1 = 4 
+0

Не могли бы вы пояснить это немного? Непонятно (по крайней мере, для меня), какую операцию вы пытаетесь выполнить ... Это не 4D векторное расстояние, а не множество пересечений, так что это? – unwind

+0

Во-вторых, не знаю, что вы здесь делаете. –

+3

Он, вероятно, означает расстояние в 1 норму. –

ответ

6

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

>>> A=[1,2,3,4] 
>>> B=[2,3,4,5] 
>>> sum(abs(a - b) for a, b in zip(A, B)) 
4 
2

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

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

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 
8

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

numpy.linalg.norm(a - b, ord=1)