版权提示:转自np.linalg.norm(求范数)
np.linalg.norm(求范数)
1、linalg=linear(线性)+algebra(代数),norm则表示范数。
2、函数参数
x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)
-
x: 表示矩阵(也可以是一维)
-
②ord:范数类型
向量的范数:
矩阵的范数:
o
r
d
=
1
ord=1
ord=1:列和的最大值
o
r
d
=
2
ord=2
ord=2:
∣
λ
E
−
A
T
A
∣
=
0
|λE-ATA|=0
∣λE−ATA∣=0,求特征值,然后求最大特征值得算术平方根(matlab在线版,计算
a
n
s
=
A
T
A
,
[
x
,
y
]
=
e
i
g
(
a
n
s
)
,
s
q
r
t
(
y
)
ans=ATA,[x,y]=eig(ans),sqrt(y)
ans=ATA,[x,y]=eig(ans),sqrt(y),
x
x
x是特征向量,
y
y
y是特征值)
o
r
d
=
∞
ord=∞
ord=∞:行和的最大值
ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号。(没仔细看,以为默认情况下就是矩阵的二范数,修正一下,默认情况下是求整个矩阵元素平方和再开根号)
- axis:处理类型
axis=1 表示按行向量处理,求多个行向量的范数
axis=0 表示按列向量处理,求多个列向量的范数
axis=None 表示矩阵范数。
- keepding:是否保持矩阵的二维特性
True表示保持矩阵的二维特性,False相反
3、代码实现
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
* * *** * * * *
* * * ** * *
**** * ** * *
* * * ** * *
* * ** * * ****
@File :study/7-求范数.py
@Date :2020/12/9 上午7:43
@Require :
@Author :hjxu2016, https://blog.csdn.net/hjxu2016/
@Funtion :np.linalg.norm,求矩阵的范数
"""
import numpy as np
x = np.array([
[0, 3, 4],
[1, 6, 4]])
#默认参数ord=None,axis=None,keepdims=False
print ("默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性):",np.linalg.norm(x))
print ("矩阵整体元素平方和开根号,保留矩阵二维特性:",np.linalg.norm(x,keepdims=True))
print ("矩阵每个行向量求向量的2范数:",np.linalg.norm(x,axis=1,keepdims=True))
print ("矩阵每个列向量求向量的2范数:",np.linalg.norm(x,axis=0,keepdims=True))
print ("矩阵1范数:",np.linalg.norm(x,ord=1,keepdims=True))
print ("矩阵2范数:",np.linalg.norm(x,ord=2,keepdims=True))
print ("矩阵∞范数:",np.linalg.norm(x,ord=np.inf,keepdims=True))
print ("矩阵每个行向量求向量的1范数:",np.linalg.norm(x,ord=1,axis=1,keepdims=True))
结果显示:
默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性): 8.831760866327848
矩阵整体元素平方和开根号,保留矩阵二维特性: [[8.83176087]]
矩阵每个行向量求向量的2范数: [[5. ]
[7.28010989]]
矩阵每个列向量求向量的2范数: [[1. 6.70820393 5.65685425]]
矩阵1范数: [[9.]]
矩阵2范数: [[8.70457079]]
矩阵∞范数: [[11.]]
矩阵每个行向量求向量的1范数: [[ 7.]
[11.]]
4、总结
①矩阵的三种范数求法(应该是4种了,在默认情况下,又多出了一种情况)
②向量的三种范数求法
转自
https://blog.csdn.net/hqh131360239/article/details/79061535