numpy.linalg.norm 函数计算范数

numpy.linalg.norm 函数是NumPy库中的一个函数,用于计算各种范数(Norm)或其他类型的矢量/矩阵量度。在处理多维数组时,这个函数可以用来计算向量的长度或者矩阵的某种“大小”。

对于一维数组(也就是向量):

np.linalg.norm(vector, ord=None, axis=None, keepdims=False, ...) 

计算的是该向量的范数。

  • vector 是要计算范数的一维数组。

  • ord 参数可选,指定计算哪种范数,默认是 L2 范数,即向量元素绝对值平方和的平方根。

    • 如果 ord 等于 None 或 2,计算的是 L2​ 范数:
    • 若 ord 等于 1,计算的是 L1​ 范数(曼哈顿距离):
    • 其他整数 p 将计算 Lp​ 范数:
    • 当 ord 为无穷大(np.inf),则计算的是最大绝对值:

对于二维以上的数组(比如矩阵或多维数组),如果没有指定 axis 参数,np.linalg.norm 会先将其扁平化成一维,然后计算整个数组的范数。如果指定了 axis,它会沿着指定轴分别计算各列或各行的范数。

在进行行归一化时,我们通常会对权重矩阵沿行方向计算 L2 范数,这样可以得到每行的长度,随后通过除以这些长度完成归一化。

举个栗子,计算矩阵 W 每一行 L2 范数:

import numpy as np

# 假设 W 是一个 (m, n) 形状的权重矩阵
W = np.array([...])  # 这里是具体的权重数据

# 计算每行的 L2 范数
row_norms = np.linalg.norm(W, ord=2, axis=1, keepdims=True)

# 对原始矩阵 W 的每一行进行归一化
W_normalized = W / row_norms

这里的 keepdims=True 保证了计算出来的 row_norms 仍与 W 保持相同的形状,便于后续直接进行点除运算。同时,为了避免除以零的情况,在实际操作中可能会添加一个小于 1 的正值(如 1e-8)来避免分母为零的错误。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值