Beachten Sie, dass, wie Perimosocordiae zeigt , ab NumPy Version 1.9 np.linalg.norm(x, axis=1)
der schnellste Weg ist, die L2-Norm zu berechnen.
Wenn Sie eine L2-Norm berechnen, können Sie sie direkt berechnen (indem Sie das axis=-1
Argument verwenden, um entlang der Zeilen zu summieren):
np.sum(np.abs(x)**2,axis=-1)**(1./2)
Lp-Normen können natürlich ähnlich berechnet werden.
Es ist erheblich schneller als np.apply_along_axis
, wenn auch vielleicht nicht so bequem:
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
Andere ord
Formen von norm
können auch direkt berechnet werden (mit ähnlichen Beschleunigungen):
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