如何将 numpy.linalg.norm 应用于矩阵的每一行?

2023-12-13

我有一个二维矩阵,我想取每一行的范数。但是当我使用numpy.linalg.norm(X)直接取整个矩阵的范数。

我可以通过使用 for 循环来获取每一行的范数,然后获取每一行的范数X[i],但这需要很长时间,因为我有 30k 行。

有什么建议可以找到更快的方法吗?或者说可以申请吗np.linalg.norm到矩阵的每一行?


对于 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 numpy.linalg.norm 应用于矩阵的每一行? 的相关文章

随机推荐