Python3-numpy.linalg.norm
0x01 摘要
numpy.linalg.norm
作用是求向量的范数。下面介绍下他的主要参数。
0x02 参数
- x
类数组的对象。如果没有指定axis
,就只能是1或2维 - ord
为设置具体范数值(默认是2范数)- ord=2, 默认,二范数 = 向量中每个维度值的平方的和再开方
- ord=1,一范数 = 向量中每个维度值的绝对值的和
- ord=np.inf, 无穷范数 = 向量中每个维度值的绝对值的中的最大值
- ord=-np.inf, 无穷范数 = 向量中每个维度值的绝对值的中的最小值
- axis
向量的计算方向。- 0 按列向量计算范数
- 1 按行向量计算范数
- 不配置时按整个矩阵计算范数
- keepdims
bool类型,默认为false。设置是否保持维度不变
0x03 测试代码
python代码如下:
import numpy as np
x=np.array([[0, 3, 4], [2, 6, 4]])
# 按行求行向量二范数
# 向量的第二范数为传统意义上的向量长度
y=np.linalg.norm(x, axis=1, keepdims=True)
print("y=")
print(y)
# 求原矩阵的行向量的单位向量
z=x/y
print("z=")
print(z)
# 上式等价于 按行求向量的平方和 然后 开方
y2=np.sum(x**2, axis=1, keepdims=True)**0.5
print("y2=")
print(y2)
# 不保持维度不变
y3=np.sum(x**2, axis=1, keepdims=False)**0.5
print("y3=")
print(y3)
# 默认keepdims为False
y4=np.sum(x**2, axis=1)**0.5
print("y4=")
print(y4)
# 按列计算范数
y5=np.sum(x**2, axis=0, keepdims=False)**0.5
print("y5=")
print(y5)
# 一范数
y6=np.linalg.norm(x, ord = 1,axis=1, keepdims=True)
print("y6=")
print(y6)
# 正无穷范数
y6=np.linalg.norm(x, ord = np.inf,axis=1, keepdims=True)
print("y6=")
print(y6)
# 负无穷范数
y7=np.linalg.norm(x, ord = -np.inf,axis=1, keepdims=True)
print("y7=")
print(y7)
# 不配置axis,按矩阵求范数
y8=np.linalg.norm(x, ord = 1, keepdims=True)
print("y8=")
print(y8)
运行结果如下:
y=
[[5. ]
[7.48331477]]
z=
[[0. 0.6 0.8 ]
[0.26726124 0.80178373 0.53452248]]
y2=
[[5. ]
[7.48331477]]
y3=
[5. 7.48331477]
y4=
[5. 7.48331477]
y5=
[2. 6.70820393 5.65685425]
y6=
[[ 7.]
[12.]]
y6=
[[4.]
[6.]]
y7=
[[0.]
[2.]]
y8=
[[9.]]
0xFE 附录
求取向量二范数,并求取单位向量(行向量计算),如下图: