numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。
一、计算逆矩阵
语法:np.linalg.inv()
import numpy as np#导入模块
# 准备一个矩阵
a = np.mat('0 1 2;1 0 3;4 -3 8')
#计算逆矩阵
a_inverse = np.linalg.inv(a)
a*a_inverse #验证A* A-1 =I 是否成立
得到对角方阵,成立
matrix([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
二、解线性方程组
语法:np.linalg.solve()
已知线性方程组:
求x,y,z
#根据方程组系数准备一个矩阵
b = np.mat('1,-2,1;0 2 -8;-4 5 9')
# 创建结果的!!!!数组
value = np.array([0,8,-9])
value
array([ 0, 8, -9])
x,y,z = np.linalg.solve(b,value)
print(x)
print(y)
print(z)
29.0
16.0
3.0
三、特征值和特征向量
语法:np.linalg.eigvals() np.linalg.eig()
eigvals 函数可以计算矩阵的特征值
eig 可以返回一个包含特征值与特征向量的元组
c = np.mat('3 -2;1 0')
#特征值
np.linalg.eigvals(c)
array([2., 1.])
#特征值和特征向量
np.linalg.eig(c)
(array([2., 1.]), matrix([[0.89442719, 0.70710678],
[0.4472136 , 0.70710678]]))
补充一小点特征值和特征向量的知识点:
定义:
解特征值和特征向量:
四、奇异值分解
语法:np.linalg.svd()
在numpy.linalg模块中的svd函数可以对矩阵进行奇异值分解。该函数返回3个矩阵——U、Sigma和V,其中U和V是正交矩阵,Sigma包含输入矩阵的奇异值。
d = np.mat('4,11,14;8,7,-1') #准备一个矩阵
u,sigma,v = np.linalg.svd(d,full_matrices=False) #这个参数很重要,但是我不知道是什么
u
matrix([[-0.93684246, -0.34975164],
[-0.34975164, 0.93684246]])
sigma
array([19.19547799, 8.86191992])
v
matrix([[-0.34098567, -0.66440276, -0.66505469],
[ 0.68785693, 0.3058738 , -0.65825076]])
np.diag(sigma) #变成斜角的2*2矩阵
array([[19.19547799, 0. ],
[ 0. , 8.86191992]])
u*np.diag(sigma)*v #验证奇异值,返回d
matrix([[ 4., 11., 14.],
[ 8., 7., -1.]])
5.计算矩阵的行列式
语法:np.linalg.det()
e = np.mat('3 4;5 6')
np.linalg.det(e)
-2.0000000000000004