Numpy中的 linalg 模块详解

1. 概述

Numpy中的 linalg 模块包含线性代数中的函数方法,用于求解矩阵的逆矩阵、求特征值、解线性方程组以及求行列式等,有了这个模块,在涉及到矩阵时,将极大的节约我们的时间和代码量。
下面对linalg模块中的函数进行一一讲解,因为相对简单,本文直接给出实际演示,若有不明白出可评论留言。

2. numpy.linalg
2.1 计算逆矩阵 linalg.inv(A)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2019/3/1 17:31
# @Author  : Arrow and Bullet
# @FileName: linalg.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/qq_41800366
from numpy import *

A = array([[1, 2], [4, 5]])
B = mat(A)  # [[1 2][4 5]]
print(B)
C = linalg.inv(B)
print(C)  # [[-1.66666667  0.66666667][ 1.33333333 -0.33333333]]

注:矩阵必须是方阵且可逆,否则会抛出LinAlgError异常。

2.2 计算行列式 linalg.det(A)
from numpy import *

A = array([[1, 2], [4, 5]])
B = mat(A)  # [[1 2][4 5]]
print(B)
C = linalg.det(B)
print(C)  # -2.9999999999999996
2.3 计算特征值和特征向量

linalg模块中,eigvals()函数可以计算矩阵的特征值,而eig()函数可以返回一个包含特征值和对应的特征向量的元组

from numpy import *

A = array([[1, 2], [4, 5]])
B = mat(A)  # [[1 2][4 5]]
print(B)
C = linalg.eigvals(B)
print(C)  # [-0.46410162  6.46410162]
D = linalg.eig(B)
print(D)  # (array([-0.46410162,  6.46410162]), matrix([[-0.80689822, -0.34372377],[ 0.59069049, -0.9390708 ]]))
2.4 求解线性方程组

linalg中的函数solve()可以求解形如 Ax = b 的线性方程组,其中 A 为矩阵,b 为一维或二维的数组,x 是未知变量

from numpy import *

A = mat("1 -2 1;0 2 -8;-4 5 9")
B = array([0, 8, -9])
print(A)  # [[ 1 -2  1][ 0  2 -8][-4  5  9]]
X = linalg.solve(A, B)
print(X)  # [29. 16.  3.]
2.5 奇异值分解

SVD(Singular Value Decomposition,奇异值分解)是一种因子分解运算,将一个矩阵分解为3个矩阵的乘积;
linalg模块中的svd()函数可以对矩阵进行奇异值分解,该函数返回3个矩阵——U、Sigma和V,其中U和V是正交矩阵,Sigma包含输入矩阵的奇异值。

from numpy import *

A = mat("1 -2 1;0 2 -8;-4 5 9")
U, Sigma, V = linalg.svd(A)
print(U)  
# [[ 0.0154013   0.42284401  0.9060716 ]
# [-0.54920827 -0.75366444  0.36105427]
# [ 0.83554358 -0.50318272  0.22062201]]
print(Sigma)  # [12.753856    5.77394316  0.02715914]
print(V)
# [[-0.26084449  0.23902565  0.93532181]
# [ 0.42182177 -0.84325917  0.33313716]
# [ 0.86834702  0.48143609  0.11913328]]
2.6 广义逆矩阵

linalg模块中的 pinv()函数可进行求解广义逆矩阵;
#注:inv函数只接受方阵作为输入矩阵,而pinv函数则没有这个限制

from numpy import *

A = mat("1 -2 1;0 2 -8")
print(A)  # [[ 1 -2  1][ 0  2 -8]]
B = linalg.pinv(A)
print(B)  # [[ 0.25757576  0.04545455][-0.42424242 -0.04545455][-0.10606061 -0.13636364]]

希望能够帮助到大家,有什么问题可以 直接评论即可,喜欢有用的话可以点个赞让更多的人看到,如果不够详细的话也可以说,我会及时回复的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangpaopao0609

看星空看日落不如看我的眼眸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值