一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
前言
提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。
| 函数 | 内容 |
|---|---|
dot | 两数组的点积 |
vdot | 两向量的点积 |
inner | 两数组的内积 |
determinant | 数组的行列式 |
matmul | 两数组的矩阵积 |
inv | 求矩阵的逆 |
solve | 求解线性矩阵方程 |
相关函数介绍
numpy.dot():numpy.dot()
numpy.vdot:numpy.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()函数用于求解矩阵形式的线性方程的解。
比如线性方程:
可以使用矩阵进行表示:
即
可以看到要使用numpy.linalg.solve()函数求解线性方程,必须先了解矩阵的逆。
numpy.linalg.inv()
numpy.linalg.inv()函数计算矩阵的乘法逆矩阵。
逆矩阵:设A是数域上的一个阶矩阵,若在相同数域上存在另一个阶矩阵B,使得: ,则我们称B是A的逆矩阵,而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]]
现在可以求解线性方程:
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]]
可以看出两种方法求出的结果是相同的。
numpy.linalg.det()
numpy.linalg.det()函数计算输入矩阵的行列式。
- 对于矩阵,它是左上和右下元素的乘积与其他两个的乘积的差.对于矩阵[[a,b],[c,d]],行列式计算为.较大的方阵被认为是矩阵的组合。
计算矩阵的行列式
import numpy as np
a = np.array([[1,2], [3,4]])
ans = np.linalg.det(a) #1*4-2*3=-2
print(ans)
-2.0000000000000004
计算矩阵的行列式
b = np.array([[6, 1, 1], [4, -2, 5], [2, 8, 7]])
ans = np.linalg.det(b)
print(ans)
print(6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2))
-306.0
-306