python关于矩阵的基本程序知识——使用Sympy模块
python进行矩阵计算可以用两个模块:numpy和sympy
1、Numpy
python关于矩阵的基本程序知识——使用Numpy模块
2、Sympy
矩阵的创建-Matrix()
说明:
Matrix(list) #使用list来确定矩阵的维度。
例如:
from sympy import *# 一维矩阵
m1 = Matrix([1, 2, 3])
m2 = Matrix([[1, 2, 3]])
#二维矩阵
m3 = Matrix([[1, -1], [3, 4], [0, 2]])
print(m1)
pprint(m1)
print(m2)
pprint(m2)
print(m3)
pprint(m3)
结果:
Matrix([[1], [2], [3]])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3⎦
Matrix([[1, 2, 3]])
[1 2 3]
Matrix([[1, -1], [3, 4], [0, 2]])
⎡1 -1⎤
⎢ ⎥
⎢3 4 ⎥
⎢ ⎥
⎣0 2 ⎦
常用的构造矩阵
可以使用sympy自带的方法来快速的构造常用矩阵
- 单位矩阵:eye()
- 零矩阵:zeros()
- 一矩阵:ones()
- 对角矩阵:diag()
例如:
from sympy import *print(eye(2))
print(zeros(2))
print(zeros(2,1)) #2行1列
print(ones(2))
print(diag(2,0))
结果:
Matrix([[1, 0], [0, 1]])
Matrix([[0, 0], [0, 0]])
Matrix([[0], [0]])
Matrix([[1, 1], [1, 1]])
Matrix([[2, 0], [0, 0]])
矩阵维度
shape()函数
A.shape —— 求矩阵A的维度
例如:
from sympy import *A = Matrix([[1, 1, 7], [2, 3, 5]])
print(A)
pprint(A)
print(A.shape)
结果:
Matrix([[1, 1, 7], [2, 3, 5]])
⎡1 1 7⎤
⎢ ⎥
⎣2 3 5⎦
(2, 3)
对矩阵行、列进行操作
- 获得单行与单列:.row(n) .col(n)
- 删除行与列:row_del(n) .col_del(n)
- 插入新行与列:.row_insert(pos, M) .col_insert(pos, M)
获得单行与单列:
.row(n) .col(n)
from sympy import *A = Matrix([[1, 1, 7], [2, 3, 5]])
# 获得单行与单列
print(A.row(0))
print(A.col(0))
结果:
Matrix([[1, 1, 7]])
Matrix([[1], [2]])
删除行与列:
row_del(n) .col_del(n)
from sympy import *A = Matrix([[1, 1, 7], [2, 3, 5]])
# 删除行与列
A.row_del(0)
print("删除第一行后:", A)
A.col_del(0)
print("删除第一列后:", A)
print(A)
结果:
删除第一行后: Matrix([[2, 3, 5]])
删除第一列后: Matrix([[3, 5]])
Matrix([[3, 5]])
插入新行与列:
.row_insert(pos, M) .col_insert(pos, M)
from sympy import *# 插入新的行与列
B = Matrix([[2, 3]])
print("B:", B)
pprint(B)
B = B.row_insert(1, Matrix([[0, 4]]))
print("插入新行后:", B)
B = B.col_insert(2, Matrix([9, 8]))
print("插入新列后:", B)
结果:
B: Matrix([[2, 3]])
[2 3]
插入新行后: Matrix([[2, 3], [0, 4]])
插入新列后: Matrix([[2, 3, 9], [0, 4, 8]])
转置矩阵
A.T —— A矩阵的转置矩阵
from sympy import *A = Matrix([[1, -1], [3, 4], [0, 2]])
pprint(A)
# 求转置矩阵
print("其转置矩阵是:")
pprint(A.T)
结果:
⎡1 -1⎤
⎢ ⎥
⎢3 4 ⎥
⎢ ⎥
⎣0 2 ⎦
其转置矩阵是:
⎡1 3 0⎤
⎢ ⎥
⎣-1 4 2⎦
逆矩阵
求逆矩阵:A**(-1)
from sympy import *A = Matrix([[1, -1], [3, 4]])
pprint(A)
# 求逆矩阵
print("其逆矩阵是:")
pprint(A**(-1))
结果:
⎡1 -1⎤
⎢ ⎥
⎣3 4 ⎦
其逆矩阵是:
⎡4/7 1/7⎤
⎢ ⎥
⎣-3/7 1/7⎦
矩阵的乘法
乘法:*
from sympy import *M = Matrix([[1, -1, 1], [2, 3, -2]])
N = Matrix([[1, 2], [2, 1], [1, 1]])# 求乘法
print(M*N)
结果:
Matrix([[0, 2], [6, 5]])
矩阵的加减法
sympy里的加减法,直接使用+ -即可
from sympy import *M = Matrix([[1, 2],[3, 4]])
N = Matrix([[4, 5],[5, 6]])# 加法与减法
print("M+N:" )
pprint(M+N)
print("M-N:" )
pprint(M-N)
结果:
M+N:
⎡5 7 ⎤
⎢ ⎥
⎣8 10⎦
M-N:
⎡-3 -3⎤
⎢ ⎥
⎣-2 -2⎦
行列式
- 求行列式:M.det()
- 求阶梯矩阵:M.rref()
- 求特征值:M.eignvals()
- 求特征值与向量:M.eigenvects()
from sympy import *A = Matrix([[1, 0, 1], [2, -1, 3], [4, 3, 2]])
# 求行列式
print("行列式:", A.det())
# 求阶梯行列式
#他的基本特征是如果所给矩阵为阶梯型矩阵则矩阵中每一行的第一个不为零的元素的左边及其所在列以下全为零。
print("阶梯行列式:", A.rref())B = Matrix([[3, -2, 4, -2], [5, 3, -3, -2], [5, -2, 2, -2], [5, -2, -3, 3]])
# 求特征值与特征向量
print("特征值: ")
print(B.eigenvals())
print("特征值与特征向量: ")
print(B.eigenvects())
结果:
行列式: -1
阶梯行列式: (Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]), (0, 1, 2)) #(0,1,2)是指阶梯行列式第0,1,2行满足阶梯矩阵的特征
#.rref()方法返回包含两个元素的tuple, 第一个是行阶梯形矩阵,第二个是列号列表
特征值:
{3: 1, -2: 1, 5: 2} #特征值为:3,-2,5,5
特征值与特征向量:
[(-2, 1, [Matrix([
[0],
[1],
[1],
[1]])]), (3, 1, [Matrix([
[1],
[1],
[1],
[1]])]), (5, 2, [Matrix([
[1],
[1],
[1],
[0]]), Matrix([
[ 0],
[-1],
[ 0],
[ 1]])])]
#特征值为-2对应的特征向量为:Matrix([[0],[1],[1],[1]])
#特征值为3对应的特征向量为:Matrix([[1],[1],[1],[1]])
#特征值为5对应的特征向量为:Matrix([[1],[1],[1],[0]]),Matrix([[0],[-1],[0],[1]]),
,
对角化矩阵与矩阵的相似对角化
对角化一个矩阵,用diagonalize()
from sympy import *A = Matrix([[1, 3, 3], [-3, -5, -3], [3, 3, 1]])
P, D = A.diagonalize()print('矩阵A:')
print(A)
print('可逆矩阵P:')
print(P)
print('对角矩阵D:')
print(D)
print("P*D*P**-1:")
print(P*D*P**-1)
结果:
矩阵A:
Matrix([[1, 3, 3], [-3, -5, -3], [3, 3, 1]])
可逆矩阵P:
Matrix([[-1, -1, 1], [1, 0, -1], [0, 1, 1]])
对角矩阵D:
Matrix([[-2, 0, 0], [0, -2, 0], [0, 0, 1]])
P*D*P**-1:
Matrix([[1, 3, 3], [-3, -5, -3], [3, 3, 1]])
如果存在可逆矩阵P,使P-1AP为对角阵,则称A可相似对角化
所有上面例题的矩阵A可相似对角化
python关于矩阵的基本程序知识——使用Sympy模块相关推荐
- python关于矩阵的基本程序知识——使用Numpy模块
python进行矩阵计算可以用两个模块:numpy和sympy 1.Numpy 创建矩阵 from numpy import *a1=array([1,2,3]) #数组 a2=mat([1,2,3] ...
- python创建矩阵_在Python中创建矩阵的Python程序
python创建矩阵 There is no specific data type in Python to create a matrix, we can use list of list to c ...
- Python解决矩阵的PLU分解及求矩阵的逆
Python解决矩阵的PLU分解及求矩阵的逆 关于PLU的分解基础知识就不叙述了,可以自己去看矩阵分析的书,大体上和高斯消去法差不多. PLU分解被经常用在Ax=bAx=bAx=b的求解上 在这里xx ...
- Python实现矩阵乘法
问题 矩阵相信大家都知道,是线性代数中的知识,就是一系列数集.顾名思义,数字组成的矩形,例如: [1 2 3 4 5 67 8 9 1011 ] 现在,我们需要用python编程来实现矩阵的乘法. 输 ...
- python打开是什么颜色-python实现简单颜色识别程序
本文实例为大家分享了python实现简单颜色识别程序的具体代码,供大家参考,具体内容如下 import numpy as np import cv2 font= cv2.FONT_HERSHEY_SI ...
- 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python就业前景广阔.很多 ...
- Python的一些小技巧小知识
Chapter 12. HOW-TO 本章内容记录Python的一些小技巧小知识.来源是网上摘录或自己学习所得. 如何判断操作系统类型 import sys print sys.platform pr ...
- Python脚本导出为exe程序
环境:Pycharm2019.1 + Win10 + Python3.7.3 一.pyinstaller简介 Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者 ...
- 零基础如何学好Python?Python有哪些必须学的知识?
跟几个IT界的大佬提起Python,他们说零基础学好Python很简单,Python进阶需要花费些气力.那么零基础如何学好Python?Python有哪些必须学的知识?学习的策略技巧有哪些?今天小千整 ...
最新文章
- Linux 4.0 里,你可能再也不需要重启你的操作系统。
- 没有文档,没有老员工讲解,悲催的新人如何快速熟悉一个新项目?
- Java中如何使用Thread和Runnable创建的线程
- 智能搜索引擎---命题的确定
- pythondevp2p_以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍
- .NET Core 3.0稳定版发布
- SpringMVC学习笔记-新建工程及一些注意事项
- OSSIM识别APT的三板斧
- php 全局变量能定义数组吗,php数组声明、遍历、数组全局变量使用小结
- 关键词推荐工具中的用户引导机制之三
- 全球网速最快的地方在哪里?中国固定宽带网速增长超美国!
- 基于SpringBoot的房屋租赁管理系统
- 计算机未安装OCR应用程序,OCR使用的常见问题及解决(转载)
- itextsharp、Aspose.Words、Aspose.Cells联合使用
- 如何实现一个二维码支持微信支付和支付宝支付
- ios应用升级到ios15后闪退
- 液晶坏点如何鉴别 LCD显示器选购之道
- CnPeng说:“快应用”的慢节奏
- 建立KMS服务器,激活WIN、office
- c ref java_使用JNA将C数组返回给Java
热门文章
- mysql root用户不存在_MySQL – 解决root用户下仍然出现权限问题-无法建库
- 20世纪最好的十大算法、算法笔记(2008-11-15 22:16:57、2011-04-21 19:29:05)
- 配置阿里云域名的证书
- 三维Tensor维度分析,举例mask[0,:],mask[:,:,0],mask[:,0,:]
- Python爬虫笔记之用BeautifulSoup及requests库爬取
- CocosCreator受击闪白效果 可合批
- java 存储关系网络_java网络通信:HTTP协议 之 Sessions与Cookies
- 一起脱去小程序的外套和内衣 - 微信小程序架构解析
- 【AAAI 2020】全部接受论文列表(二)
- 自然语言推理与自然语言解释