Зауважте, що, як показує perimosocordiae , станом на NumPy версії 1.9, np.linalg.norm(x, axis=1)
це найшвидший спосіб обчислення норми L2.
Якщо ви обчислюєте норму L2, ви можете обчислити її безпосередньо (використовуючи axis=-1
аргумент для підсумовування по рядках):
np.sum(np.abs(x)**2,axis=-1)**(1./2)
Lp-норми, звичайно, можна обчислити подібним чином.
Це значно швидше, ніж np.apply_along_axis
, хоча, можливо, і не настільки зручно:
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
Інші ord
форми norm
можна також обчислити безпосередньо (з подібними прискореннями):
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