【Numpy】基于numpy库的范数计算方法
范数
范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。
np.linalg.norm
(1)np.linalg.inv():矩阵求逆
(2)np.linalg.det():矩阵求行列式(标量)
linalg=linear(线性)+algebra(代数),norm则表示范数。首先需要注意的是范数是对向量(或者矩阵)的度量,是一个标量(scalar):
首先help(np.linalg.norm)查看其文档:
x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)
①x: 表示矩阵(也可以是一维)
②ord:范数类型
向量的范数:
参数 | 说明 | 计算方法 |
---|---|---|
默认 | 二范数:$\mathscr{l}_2$ | $\sqrt{x_{1}^{2}+x_{2}^{2}+…+x_{n}^{2}}$ |
ord=2 | 二范数:$\mathscr{l}_2$ | $\sqrt{x_{1}^{2}+x_{2}^{2}+…+x_{n}^{2}}$ |
ord=1 | 一范数:$\mathscr{l}_1$ | $|x_1|+|x_2|+…+|x_n|$ |
ord=np.inf | 无穷范数:$\mathscr{l}_{\infty}$ | $max({x_1, x_2, …, x_n})$ |
矩阵的范数:
ord=1:列和的最大值
ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根
ord=$\infty$:行和的最大值
ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号。(没仔细看,以为默认情况下就是矩阵的二范数,修正一下,默认情况下是求整个矩阵元素平方和再开根号)
1 | 3, 4]) x = np.array([ |
二范数的一个等价方法:
1 | import numpy as np |
1 | x= |
范数理论的一个小推论告诉我们:$\ell _1 \geq \ell _2 \geq \ell _\infty$
③axis:处理类型
axis=1表示按行向量处理,求多个行向量的范数
axis=0表示按列向量处理,求多个列向量的范数
axis=None表示矩阵范数。
④keepding:是否保持矩阵的二维特性
True表示保持矩阵的二维特性,False相反
1 | import numpy as np |
1 | 默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性): 8.83176086633 |
补充
估计线性模型中的系数:b=a*x
1 | a=np.linalg.lstsq(x,b) |
求方阵的逆矩阵
1 | np.linalg.inv(A) |
求广义逆矩阵:
1 | np.linalg.pinv(A) |
求矩阵的行列式:
1 | np.linalg.det(A) |
解形如AX=b的线性方程组:
1 | np.linalg.solve(A,b) |
求矩阵的特征值:
1 | np.linalg.eigvals(A) |
求特征值和特征向量:
1 | np.linalg.eig(A) |
Svd分解:
1 | np.linalg.svd(A) |