前言

N u m P y NumPy NumPy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。

函数内容
dot两数组的点积
vdot两向量的点积
inner两数组的内积
determinant数组的行列式
matmul两数组的矩阵积
inv求矩阵的逆
solve求解线性矩阵方程

相关函数介绍

numpy.dot()numpy.dot()

numpy.vdotnumpy.vdot()

numpy.inner()numpy.inner()

numpy.determinant()numpy.determinant()

numpy.matmul()numpy.matmul()

numpy.inv()numpy.inv()

numpy.solve()numpy.solve()

numpy.linalg.solve()

numpy.linalg.solve()函数用于求解矩阵形式的线性方程的解。

比如线性方程:

2 x + 2 y + 2 z = 5 2x + 2y + 2z = 5 2x+2y+2z=5

2 y + 4 z = − 3 2y + 4z = -3 2y+4z=3

2 x + 5 y − 2 z = 26 2x + 5y - 2z = 26 2x+5y2z=26

可以使用矩阵进行表示:
[ 2 2 2 0 2 4 2 5 − 2 ] [ x y z ] = [ 5 − 3 26 ] \begin{bmatrix} 2& 2& 2 \\0& 2 & 4 \\2& 5 &-2 \end{bmatrix} \begin{bmatrix} x \\y \\z \end{bmatrix} = \begin{bmatrix} 5 \\-3 \\26 \end{bmatrix} 202225242xyz=5326

A X = B → X = A − 1 B AX=B\rightarrow X=A^{-1}B AX=BX=A1B

可以看到要使用numpy.linalg.solve()函数求解线性方程,必须先了解矩阵的逆。

numpy.linalg.inv()

numpy.linalg.inv()函数计算矩阵的乘法逆矩阵。

逆矩阵:设A是数域上的一个 n n n阶矩阵,若在相同数域上存在另一个 n n n阶矩阵B,使得: A B = B A = E AB=BA=E AB=BA=E ,则我们称BA的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。

import numpy as np 
a=np.array([[1,2],[3,4]])
b=np.linalg.inv(a)
print("矩阵a:",'\n',a)
print("矩阵b:",'\n',b)
print(np.dot(a,b))
矩阵a: 
 [[1 2]
 [3 4]]
矩阵b: 
 [[-2.   1. ]
 [ 1.5 -0.5]]
[[1.0000000e+00 0.0000000e+00]
 [8.8817842e-16 1.0000000e+00]]

现在可以求解线性方程:

2 x + 2 y + 2 z = 5 2x + 2y + 2z = 5 2x+2y+2z=5

2 y + 4 z = − 3 2y + 4z = -3 2y+4z=3

2 x + 5 y − 2 z = 26 2x + 5y - 2z = 26 2x+5y2z=26

A=np.array([[2,2,2],[0,2,4],[2,5,-2]])
B=np.array([[5],[-3],[26]])
X=np.linalg.solve(A,B)#先传入A(系数矩阵),B(结果矩阵),返回解矩阵X
print("线性方程组的解:\n",X)

a=np.linalg.inv(A)#A 的逆矩阵 
X=np.dot(a,B)#X=A^(-1) B
print("线性方程组的解:\n",X)
线性方程组的解:
 [[ 1.45]
 [ 3.6 ]
 [-2.55]]
线性方程组的解:
 [[ 1.45]
 [ 3.6 ]
 [-2.55]]

可以看出两种方法求出的结果是相同的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐