python numpy--线性代数的应用

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

猜你喜欢

转载自blog.csdn.net/qq_43287650/article/details/82873078