2009-05-20 72 views
13

¿Cómo puedo calcular la norma 1 de la diferencia de dos vectores, ||a - b||_1 = sum(|a_i - b_i|) en Python?Obtiene la norma 1 de un vector en Python

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

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

¿Podría aclarar eso un poco? No está claro (para mí, al menos) qué operación estás tratando de realizar ... No es una distancia vectorial 4D, y no una intersección establecida, ¿qué es? – unwind

+0

En segundo lugar, no tengo idea de lo que estás tratando de hacer aquí. –

+3

Probablemente se refiere a la distancia de 1 norma. –

Respuesta

6

Parece que está pidiendo la suma de las diferencias entre los componentes apareados de las dos matrices:

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

No está claro qué es exactamente lo que se requiere aquí, pero aquí es mi conjetura

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 tiene potentes tipos incorporados, pero listas de Python no son vectores o matrices matemáticas. Usted podría hacer esto con listas, pero probablemente será engorroso para algo más que operaciones triviales.

Si ves que necesitas vector o matriz aritmética menudo, el estándar en el campo es NumPy, que probablemente ya viene empaquetado para su sistema operativo el método Python también lo era.

Comparto la confusión de otros acerca de qué es exactamente lo que estamos tratando de hacer, pero quizás la función numpy.linalg.norm ayudará a:

>>> import numpy 
>>> a = numpy.array([1, 2, 3, 4]) 
>>> b = numpy.array([2, 3, 4, 5]) 
>>> numpy.linalg.norm((a - b), ord=1) 
4 

para mostrar cómo eso está trabajando bajo la cubiertas:

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

En NumPy, por dos vectores a y b, esto es sólo

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