最近在写航电新生赛的题,遇到一道题中,需要通过矩阵快速幂来加速递归的过程,因为python中矩阵不熟悉,故进行学习并记录。
构造方法
首先构造矩阵需要导入numpy,有两种构造方法。
import numpy
A = numpy.matrix([[1,1],[2,2]])
B = numpy.mat(([[2,2],[1,1]]))
print(A)
print(B)
#输出
'''
[[1 1]
[2 2]]
[[2 2]
[1 1]]
'''
中间部分用逗号间隔的[]可以理解为矩阵的每一行,输出行:
print(A[0])
print(A[1])
#输出
'''
[[1 1]]
[[2 2]]
'''
输出单个元素:
A = numpy.matrix([[1,2,1],[2,-1,3],[3,1,2]])
print(A[0])#第一行
print(A[0][0,0])#第一行第一个元素
print(A[0,0])#同上
#输出
'''
[[1 2 1]]
1
1
'''
shape获取矩阵行列值
A = numpy.matrix([[1,1],[2,2],[3,3]])
print(A.shape)
#输出
'''
(3, 2)
'''
A.T或A.transpose()进行矩阵转置
A = numpy.matrix([[1,1],[2,2],[3,3]])
print(A.T)
print(A.transpose())
#输出
'''
[[1 2 3]
[1 2 3]]
[[1 2 3]
[1 2 3]]
'''
矩阵相加减
A = numpy.matrix([[1,1],[2,2],[3,3]])
B = numpy.matrix([[4,4],[5,5],[6,6]])
print(A+B)
print(B-A)
#输出
'''
[[5 5]
[7 7]
[9 9]]
[[3 3]
[3 3]
[3 3]]
'''
矩阵乘法
A = numpy.matrix([[1,1],[2,2],[3,3]])
B = numpy.matrix([[1,2,3],[1,2,3]])
print(numpy.dot(A,B))
print(numpy.dot(B,A))#矩阵乘法不满足交换律
#输出
'''
[[ 2 4 6]
[ 4 8 12]
[ 6 12 18]]
[[14 14]
[14 14]]
'''
用dot进行矩阵乘法运算时需注意矩阵乘法运算的规则,否则报错。
用eye创建单位矩阵
print(numpy.eye(3))
#输出
'''
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
'''
trare计算矩阵的迹(主对角线元素的和)
B = numpy.matrix([[1,2,3],[1,2,3],[1,2,3]])
print(numpy.trace(B))
#输出
'''
6
'''
linalg.det()计算矩阵对应行列式的值(矩阵行列数必须相等)
A = numpy.matrix([[1,1],[2,3]])
B = numpy.matrix([[1,2,3],[1,2,3],[1,2,3]])
print(numpy.linalg.det(A))
print(numpy.linalg.det(B))
#输出
'''
1.0
0.0
'''
linalg.inv()计算矩阵的逆矩阵(逆矩阵:若方阵A、B满足,AB=BA=E,称B为A的逆矩阵,矩阵A的行列式值不能为0)
A = numpy.matrix([[1,-2,1],[0,2,-1],[1,1,-2]])
print(numpy.linalg.inv(A))
#输出
'''
[[ 1. 1. 0. ]
[ 0.33333333 1. -0.33333333]
[ 0.66666667 1. -0.66666667]]
'''
linalg.solve()解多元一次方程
a = [[1,2,1],[2,-1,3],[3,1,2]]#未知数系数
A = numpy.array(a)
b = [7,7,18]#常数项
B = numpy.array(b)
X = numpy.linalg.solve(A,B)
print(X)
#输出
'''
[ 7. 1. -2.]
'''
#验证结果是否正确
print(numpy.dot(a,X))
'''
[ 7. 7. 18.]
'''
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1666739907@qq.com