当前位置:   article > 正文

Numpy中的 linalg 模块详解_numpy.linalg

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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

注:矩阵必须是方阵且可逆,否则会抛出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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
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 ]]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
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.]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/119039
推荐阅读
相关标签
  

闽ICP备14008679号