时间: 2020-08-30|tag:34次围观|0 条评论

目录

[TOC]

前言

今天我们学习的是,有关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[\begin{matrix}1\\2\\3\end{matrix}\right]

\left[\begin{matrix}1 & -1\\3 & 4\\0 & 2\end{matrix}\right]

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图2
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[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]
零矩阵
\left[\begin{matrix}0 & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\end{matrix}\right]

一矩阵
\left[\begin{matrix}1 & 1 & 1 & 1\\1 & 1 & 1 & 1\\1 & 1 & 1 & 1\end{matrix}\right]
对角矩阵
\left[\begin{matrix}1 & 0 & 0\\0 & 2 & 0\\0 & 0 & 3\end{matrix}\right]

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图7
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[\begin{matrix}1 & -1\\3 & 4\\0 & 2\end{matrix}\right]

其形状是:(3, 2)

第一行是:
\left[\begin{matrix}1 & -1\end{matrix}\right]
第一列是:
\left[\begin{matrix}1\\3\\0\end{matrix}\right]
删除第一行后:
\left[\begin{matrix}3 & 4\\0 & 2\end{matrix}\right]
删除第一列后:
\left[\begin{matrix}4\\2\end{matrix}\right]

m2 = \left[\begin{matrix}2 & 3\end{matrix}\right]

插入一行是:
\left[\begin{matrix}2 & 3\\0 & 4\end{matrix}\right]
插入一列是:
\left[\begin{matrix}2 & 3 & 9\\0 & 4 & 8\end{matrix}\right]
其转转置矩阵是:
\left[\begin{matrix}2 & 3 & 9\\0 & 4 & 8\end{matrix}\right]

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图16
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[\begin{matrix}1\\2\\3\end{matrix}\right]

N = \left[\begin{matrix}4\\5\\6\end{matrix}\right]

M + N =\left[\begin{matrix}5\\7\\9\end{matrix}\right]

M - N = \left[\begin{matrix}-3\\-3\\-3\end{matrix}\right]

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图21
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[\begin{matrix}1 & -1 & 1\\2 & 3 & -2\end{matrix}\right]

N = \left[\begin{matrix}1 & 2\\2 & 1\\1 & 1\end{matrix}\right]

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

m = \left[\begin{matrix}1 & 3\\-2 & 3\end{matrix}\right]

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

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图27
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.输出:

\begin{vmatrix}1 & 0 & 1\\2 & -1 & 3\\4 & 3 & 2\end{vmatrix}=1

M = \left[\begin{matrix}1 & 0 & 1\\2 & -1 & 3\\4 & 3 & 2\end{matrix}\right]
M的阶梯矩阵:
\left ( \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right], \quad \left ( 0, \quad 1, \quad 2\right )\right )

另一个M矩阵:
M = \left[\begin{matrix}3 & -2 & 4 & -2\\5 & 3 & -3 & -2\\5 & -2 & 2 & -2\\5 & -2 & -3 & 3\end{matrix}\right]
其特征值是:
\left \{ -2 : 1, \quad 3 : 1, \quad 5 : 2\right \}

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图33
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[\begin{matrix}3 & -2 & 4 & -2\\5 & 3 & -3 & -2\\5 & -2 & 2 & -2\\5 & -2 & -3 & 3\end{matrix}\right]

P = \left[\begin{matrix}0 & 1 & 1 & 0\\1 & 1 & 1 & -1\\1 & 1 & 1 & 0\\1 & 1 & 0 & 1\end{matrix}\right]

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

PDP^{−1}=
\left[\begin{matrix}3 & -2 & 4 & -2\\5 & 3 & -3 & -2\\5 & -2 & 2 & -2\\5 & -2 & -3 & 3\end{matrix}\right]

5.6Python数据处理篇之Sympy系列(六)—矩阵的操作插图38
07.png

作者:Mark

日期:2019/03/18 周一

文章转载于:https://www.jianshu.com/p/e94d02707f4a

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《5.6Python数据处理篇之Sympy系列(六)—矩阵的操作
   

还没有人抢沙发呢~