Notez que, comme perimosocordiae montre à partir de la version 1.9 de NumPy, np.linalg.norm(x, axis=1)
est le moyen le plus rapide de calculer la norme L2.
Si vous calculez une norme L2, vous pouvez la calculer directement (en utilisant la fonction axis=-1
pour additionner les lignes) :
np.sum(np.abs(x)**2,axis=-1)**(1./2)
Les normes Lp peuvent être calculées de manière similaire, bien sûr.
Il est considérablement plus rapide que np.apply_along_axis
mais peut-être pas aussi pratique :
In [48]: %timeit np.apply_along_axis(np.linalg.norm, 1, x)
1000 loops, best of 3: 208 us per loop
In [49]: %timeit np.sum(np.abs(x)**2,axis=-1)**(1./2)
100000 loops, best of 3: 18.3 us per loop
Autre ord
Les formes de norm
peut aussi être calculée directement (avec des gains de vitesse similaires) :
In [55]: %timeit np.apply_along_axis(lambda row:np.linalg.norm(row,ord=1), 1, x)
1000 loops, best of 3: 203 us per loop
In [54]: %timeit np.sum(abs(x), axis=-1)
100000 loops, best of 3: 10.9 us per loop