Python矩阵学习记录

最近在写航电新生赛的题,遇到一道题中,需要通过矩阵快速幂来加速递归的过程,因为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
github