目录

前言

今天我们学习的是,有关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]
\]

(二)常用的构造矩阵

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]
\]

(三)基本操作

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]
\]

(四)矩阵的运算

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]
\]

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]
\]

(五)行列式

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 \}
\]

(六)对角化矩阵

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]
\]

作者:Mark

日期:2019/03/18 周一

5.6Python数据处理篇之Sympy系列(六)---矩阵的操作的更多相关文章

  1. 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数

    目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...

  2. 4.6Python数据处理篇之Matplotlib系列(六)---plt.hist()与plt.hist2d()直方图

    目录 目录 前言 (一)直方图 (二)双直方图 目录 前言 今天我们学习的是直方图,导入的函数是: plt.hist(x=x, bins=10) 与plt.hist2D(x=x, y=y) (一)直方 ...

  3. 5.5Python数据处理篇之Sympy系列(五)---解方程

    目录 目录 前言 (一)求解多元一次方程-solve() 1.说明: 2.源代码: 3.输出: (二)解线性方程组-linsolve() 1.说明: 2.源代码: 3.输出: (三)解非线性方程组-n ...

  4. 5.4Python数据处理篇之Sympy系列(四)---微积分

    目录 目录 前言 (一)求导数-diff() 1.一阶求导-diff() 2.多阶求导-diff() 3.求偏导数-diff() (二)求积分-integrate() (三)求极限-limit() ( ...

  5. 5.3Python数据处理篇之Sympy系列(三)---简化操作

    目录 5.3简化操作 目录 前言 (一)有理数与多项式的简化 1.最简化-simplify() 2.展开-expand() 3.提公因式-factor() 4.合并同类项-ceiling() 5.简化 ...

  6. 5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作

    目录 目录 前言 (一)符号的初始化与输出设置-symbol() symbols() latex() 1.作用: 2.操作: (二)替换符号-subs(old,new) 1.说明: 2.源代码: 3. ...

  7. 5.1Python数据处理篇之Sympy系列(一)---Sympy的大体认识

    目录 目录 前言 目录 前言 sympy是python一个强大的数学符号运算第三方库,具体的功能请看下面操作 官网教程: https://docs.sympy.org/latest/tutorial/ ...

  8. 4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图

    目录 前言 (一)plt.plot()函数的本质 ==1.说明== ==2.源代码== ==3.展示效果== (二)plt.plot()函数缺省x时 ==1.说明== ==2.源代码== ==3.展示 ...

  9. paper 9:SVM番外篇:支持向量机系列六:Duality —— 关于 dual 问题推导的一些补充理论。

    在之前关于 support vector 的推导中,我们提到了 dual ,这里再来补充一点相关的知识.这套理论不仅适用于 SVM 的优化问题,而是对于所有带约束的优化问题都适用的,是优化理论中的一个 ...

随机推荐

  1. [Abp 源码分析]三、依赖注入

    0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...

  2. [Abp 源码分析]五、系统设置

    0.简要介绍 Abp 本身有两种设置,一种就是 上一篇文章 所介绍的模块配置 Configuration,该配置主要用于一些复杂的数据类型设置,不仅仅是字符串,也有可能是一些 C# 运行时的一些变量. ...

  3. 网络协议 5 - ICMP 与 ping:投石问路的侦察兵

        日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 pi ...

  4. 死磕NodeJs之REPL与For Server,我的艰辛的旅程(一)

    ode.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接 ...

  5. .net core使用Pipelines进行消息IO合并

    之前的文章讲述过通过IO合并实现百万级RPS和千万级消息推送,但这两篇文章只是简单地讲了一下原理和测试结果并没有在代码实现上的讲解,这一编文章主要通过代码的实现来讲述消息IO合并的原理.其实在早期的版 ...

  6. 版本管理工具Git(一)简要介绍

    版本管理工具不但可以备份而且还能记录版本,也就是同一个东西不同时期的状态同时可以跟踪追溯.版本管理工具由CVS.SVN.Git.GitHub. 最早的版本管理工具CVS,因为多人开发项目导致工作很难协 ...

  7. Docker最全教程——从理论到实战(五)

    往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...

  8. [一]FileDescriptor文件描述符 标准输入输出错误 文件描述符

    文件描述符   当应用程序请求打开或者操作文件时,操作系统为应用程序设置一张文件列表,具体的实现形式此处不深入说明 操作系统会提供给你一个非负整数,作为一个索引号,它的作用就像地址或者说指针或者说偏移 ...

  9. 禁止用户打开HTML页面调试

    有些时候,我们可能想要禁止用户修改或者调试我们HTML页面的代码,这个时候需要组织用户打开调试窗口,下面介绍一些能够阻止用户在浏览器中打开调试窗口的方法,这些方法只能一定程度的提高打开调试的门槛,并不 ...

  10. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...