对于 numpy 1.9+
请注意,如围索索显示,从 NumPy 版本 1.9 开始,np.linalg.norm(x, axis=1)
是计算 L2 范数的最快方法。
对于 numpy
如果您正在计算 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
Other 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