2009-05-20 5 views
13

Comment puis-je calculer la norme 1 de la différence de deux vecteurs, ||a - b||_1 = sum(|a_i - b_i|) en Python?Obtenir la norme 1 d'un vecteur en Python

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

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

Pourriez-vous préciser un peu? Ce n'est pas clair (pour moi, au moins) quelle opération vous essayez d'effectuer ... Ce n'est pas une distance de vecteur 4D, et pas une intersection définie, alors qu'est-ce que c'est? – unwind

+0

Deuxièmement, aucune idée de ce que vous essayez de faire ici. –

+3

Il signifie probablement la distance de 1-norme. –

Répondre

6

Vous semblez demander la somme des différences entre les composantes paires des deux tableaux:

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

On ne sait pas ce qui est nécessaire ici exactement, mais voici ma conjecture

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 a de puissants types intégrés, mais listes Python ne sont pas des vecteurs ou des matrices mathématiques. Vous pourrait le faire avec des listes, mais il sera probablement lourd pour tout autre chose que des opérations triviales.

Si vous vous trouvez souvent besoin arithmétique vectorielle ou matrice, la norme dans le domaine est NumPy, qui vient probablement déjà emballé pour votre système d'exploitation comme Python était aussi.

Je partage la confusion entre autres sur exactement ce que vous essayez de le faire, mais peut-être la numpy.linalg.norm fonction contribuerez:

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

Pour montrer comment qui fonctionne sous la couvre:

>>> 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, pour deux vecteurs a et b, ceci est juste

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