linalg=linear+algebra ,也就是线性代数的意思,是numpy 库中进行线性代数运算方面的函数。
使用 np.linalg 这个模块,可以计算范数、逆矩阵、求特征值、解线性方程组以及求解行列式等。
本文要讲的 np.linalg.norm() ,就是计算范数的意思,norm 则表示 范数。
先来了解一下什么是范数,这有利于函数的使用。
首先要知道,范数是一个标量,它是对向量(或者矩阵)的度量
范数包含 0 范数、1范数、2范数........ P范数。
其中:
0 范数,表示向量中非零元素的个数。
1 范数,表示向量中各个元素绝对值之和。
2 范数,表示向量中各个元素平方和 的 1/2 次方,L2 范数又称 Euclidean 范数或者 Frobenius 范数。
p 范数,表示向量中各个元素绝对值 p 次方和 的 1/p 次方。
有了基础知识,我们来看看np.linalg.norm() 的用法
norm(x, ord=None, axis=None, keepdims=False)
其中:
x,表示要度量的向量
ord,表示范数的种类,默认为2 范数。ord = np.inf 表示无穷范数
axis, axis=0 表示按列向量来进行处理,求多个列向量的范数; axis =1 表示按行向量来进行处理,求多个行向量的范数
keepdims:表示是否保持矩阵的二位特性,True表示保持,False表示不保持,默认为False
注意:对于向量而言,有所不同
ord=None,表示求整体的矩阵元素平方和,再开根号
ord=1,表示求列和的最大值
ord=2,|λE-ATA|=0,求特征值,然后求最大特征值的算术平方根
ord为无穷大,表示求行和的最大值
1 一个二行二列的矩阵
- import numpy as np
- x = np.array([[1, 2],[3,4]])
- np.linalg.norm(x)
输出结果:
5.477225575051661
2 改变参数 ord
- # 矩阵列相加取最大
- np.linalg.norm(x, ord=1)
-
- # 最大特征值的算术平方根
- np.linalg.norm(x, ord=2)
-
- # 矩阵行相加取最大
- np.linalg.norm(x,ord = np.inf)
输出结果:
6.0
5.464985704219043
7.0
3 改变参数 axis
- # 求多个列向量的范数
- np.linalg.norm(x,ord = 1 ,axis=0)
- # 求多个行向量的范数
- np.linalg.norm(x,ord = 1 ,axis=1)
输出结果:
array([4., 6.])
array([3., 7.])
4 改变参数 keepdims
np.linalg.norm(x,ord = 1 ,axis=0, keepdims=True)
输出结果:
array([[4., 6.]])
注意 keepdims = True 时,输出的是一个二维数组。