5.6Python数据处理篇之Sympy系列(六)---矩阵的操作

目录

前言

今天我们学习的是,有关sympy的矩阵操作

对应官方的:Matrices

官方教程
https://docs.sympy.org/latest/tutorial/matrices.html
参考网站
https://junjiecai.github.io/posts/2017/Jan/30/sympy_intro_3/

(一)矩阵的创建-Matrix()

1.说明:

Matrix(list),使用list来确定矩阵的维度。

2.源代码:

from sympy import *

# 一纬矩阵
m1 = Matrix([1, 2, 3])

#二维矩阵
m2 = Matrix([[1, -1], [3, 4], [0, 2]])


print(latex(m1))
print(latex(m2))

3.输出:

[left[egin{matrix}1\2\3end{matrix} ight] ]

[left[egin{matrix}1 & -1\3 & 4\0 & 2end{matrix} ight] ]

01.png

(二)常用的构造矩阵

1.说明:

可以使用sympy自带的方法来快速的构造常用矩阵

  1. 单位矩阵:eye()
  2. 零矩阵:zeros()
  3. 一矩阵:ones()
  4. 对角矩阵:diag()

2.源代码:

from sympy import *

# 单位矩阵
m1 = eye(3)
print(latex(m1))

# 零矩阵
m2 = zeros(3, 4)
print(latex(m2))

# 一矩阵
m3 = ones(3, 4)
print(latex(m3))

# 对角矩阵
m4 = diag([1, 2, 3])
print(latex(m4))

3.输出:

单位矩阵

[left[egin{matrix}1 & 0 & 0\0 & 1 & 0\0 & 0 & 1end{matrix} ight] ]

零矩阵

[left[egin{matrix}0 & 0 & 0 & 0\0 & 0 & 0 & 0\0 & 0 & 0 & 0end{matrix} ight] ]

一矩阵

[left[egin{matrix}1 & 1 & 1 & 1\1 & 1 & 1 & 1\1 & 1 & 1 & 1end{matrix} ight] ]

对角矩阵

[left[egin{matrix}1 & 0 & 0\0 & 2 & 0\0 & 0 & 3end{matrix} ight] ]

02.png

(三)基本操作

1.说明:

基本操作有以下几个:

  1. 获取形状:.shape()
  2. 获得单行与单列:.row(n) .col(n)
  3. 删除行与列:row_del(n) .col_del(n)
  4. 插入新行与列:.row_insert(pos, M) .col_insert(pos, M)
  5. 对矩阵求转置:m.T

2.源代码:

from sympy import *

m = Matrix([[1, -1], [3, 4], [0, 2]])
# 矩阵
print(m)

# 获得形状
print(m.shape)

# 获得单行与单列
print(m.row(0))
print(m.col(0))

# 删除行与列
m.row_del(0)
print("删除第一行后:", m)

m.col_del(0)
print("删除第一列后:", m)
print(m)

# 插入新的行与列
m2 = Matrix([[2, 3]])
print("m2:", m2)

m2 = m2.row_insert(1, Matrix([[0, 4]]))
print("插入新行后:", m2)

m2 = m2.col_insert(2, Matrix([9, 8]))
print("插入新列后:", m2)

# 求逆矩阵
print("其逆矩阵是:", m2.T)

3.输出:

[m = left[egin{matrix}1 & -1\3 & 4\0 & 2end{matrix} ight] ]

其形状是:(3, 2)

第一行是:

[left[egin{matrix}1 & -1end{matrix} ight] ]

第一列是:

[left[egin{matrix}1\3\0end{matrix} ight] ]

删除第一行后:

[left[egin{matrix}3 & 4\0 & 2end{matrix} ight] ]

删除第一列后:

[left[egin{matrix}4\2end{matrix} ight] ]

[m2 = left[egin{matrix}2 & 3end{matrix} ight] ]

插入一行是:

[left[egin{matrix}2 & 3\0 & 4end{matrix} ight] ]

插入一列是:

[left[egin{matrix}2 & 3 & 9\0 & 4 & 8end{matrix} ight] ]

其转转置矩阵是:

[left[egin{matrix}2 & 3 & 9\0 & 4 & 8end{matrix} ight] ]

03.png

(四)矩阵的运算

1.加减法

(1)说明:

sympy里的加减法,直接使用+ -即可

(2)源代码:

from sympy import *

M = Matrix([1, 2, 3])

N = Matrix([4, 5, 6])

# 加法与减法

print("M+N:", M+N)
print("M-N:", M-N)

(3)输出效果:

[M = left[egin{matrix}1\2\3end{matrix} ight] ]

[N = left[egin{matrix}4\5\6end{matrix} ight] ]

[M + N =left[egin{matrix}5\7\9end{matrix} ight] ]

[M - N = left[egin{matrix}-3\-3\-3end{matrix} ight] ]

04.png

2.乘法与求逆

(1)说明:

乘法:*

求逆矩阵:M**(-1)

(2)源代码:

from sympy import *

M = Matrix([[1, -1, 1], [2, 3, -2]])
N = Matrix([[1, 2], [2, 1], [1, 1]])

# 求乘法
print(M*N)

# 求逆矩阵
m = Matrix([[1, 3], [-2, 3]])
print(m**(-1))

(3)输出效果:

[M = left[egin{matrix}1 & -1 & 1\2 & 3 & -2end{matrix} ight] ]

[N = left[egin{matrix}1 & 2\2 & 1\1 & 1end{matrix} ight] ]

[M*N = left[egin{matrix}0 & 2\6 & 5end{matrix} ight] ]

[m = left[egin{matrix}1 & 3\-2 & 3end{matrix} ight] ]

[m^{-1} = left[egin{matrix}frac{1}{3} & - frac{1}{3}\frac{2}{9} & frac{1}{9}end{matrix} ight] ]

05.png

(五)行列式

1.说明:

  1. 求行列式:M.det()
  2. 求阶梯矩阵:M.rref()
  3. 求特征值与向量:M.eignvals()

2.源代码:

from sympy import *


M = Matrix([[1, 0, 1], [2, -1, 3], [4, 3, 2]])

# 求行列式
print("行列式:", M.det())

# 求阶梯行列式
print("阶梯行列式:", M.rref())


# 求特征值与特征向量
M = Matrix([[3, -2,  4, -2], [5,  3, -3, -2], [5, -2,  2, -2], [5, -2, -3,  3]])
print("特征值与特征向量: ", M.eigenvals())

3.输出:

[egin{vmatrix}1 & 0 & 1\2 & -1 & 3\4 & 3 & 2end{vmatrix}=1 ]

[M = left[egin{matrix}1 & 0 & 1\2 & -1 & 3\4 & 3 & 2end{matrix} ight] ]

M的阶梯矩阵:

[left ( left[egin{matrix}1 & 0 & 0\0 & 1 & 0\0 & 0 & 1end{matrix} ight], quad left ( 0, quad 1, quad 2 ight ) ight ) ]

另一个M矩阵:

[M = left[egin{matrix}3 & -2 & 4 & -2\5 & 3 & -3 & -2\5 & -2 & 2 & -2\5 & -2 & -3 & 3end{matrix} ight] ]

其特征值是:

[left { -2 : 1, quad 3 : 1, quad 5 : 2 ight } ]

06.png

(六)对角化矩阵

1.说明:

如果要对角化一个矩阵,用diagonalize()

2.源代码:

from sympy import *

M = Matrix([[3, -2,  4, -2], [5,  3, -3, -2], [5, -2,  2, -2], [5, -2, -3,  3]])

P, D = M.diagonalize()

print('矩阵M')
print(M)

print('矩阵P')
print(P)

print('矩阵D')
print(D)

print("P*D*P**-1")
print(P*D*P**-1)

3.输出:

[M = left[egin{matrix}3 & -2 & 4 & -2\5 & 3 & -3 & -2\5 & -2 & 2 & -2\5 & -2 & -3 & 3end{matrix} ight] ]

[ P = left[egin{matrix}0 & 1 & 1 & 0\1 & 1 & 1 & -1\1 & 1 & 1 & 0\1 & 1 & 0 & 1end{matrix} ight] ]

[D = left[egin{matrix}-2 & 0 & 0 & 0\0 & 3 & 0 & 0\0 & 0 & 5 & 0\0 & 0 & 0 & 5end{matrix} ight] ]

(PDP^{−1}=)

[left[egin{matrix}3 & -2 & 4 & -2\5 & 3 & -3 & -2\5 & -2 & 2 & -2\5 & -2 & -3 & 3end{matrix} ight] ]

07.png

作者:Mark

日期:2019/03/18 周一

原文地址:https://www.cnblogs.com/zyg123/p/10554686.html