python进行矩阵运算

python进行矩阵运算

  • 一、矩阵相乘
  • 二、矩阵求逆
  • 三、矩阵特征值与特征向量求解
  • 四、矩阵约当标准型与转换矩阵求解
  • 五、矩阵奇异值分解
  • 六、矩阵方程组求解

一、矩阵相乘

python中矩阵相乘可以使用numpy实现也可以使用sympy实现,以numpy实现为例,代码如下:

import numpy as npa01=np.random.randint(10,size=(4,3))
print(a01)
array([[6, 4, 9],[1, 4, 8],[8, 0, 0],[5, 6, 8]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],[6, 4, 6, 2],[5, 2, 8, 2]])a03=np.dot(a01,a02)
print(a03)
array([[ 99,  76, 138,  80],[ 69,  39,  95,  33],[ 40,  56,  56,  72],[101,  75, 135,  73]])

也可将乘积转换为分数形式,示例代码如下:

import numpy as np
from fractions import Fractiona01=np.random.randint(10,size=(4,3)).astype(float)
a01[0,0]=0.5
print(a01)
array([[0.5, 4. , 3. ],[0. , 4. , 4. ],[4. , 3. , 6. ],[0. , 2. , 6. ]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],[6, 4, 6, 2],[5, 2, 8, 2]])a03=np.dot(a01,a02)
print(a03)#a03为小数形式
array([[41.5, 25.5, 51.5, 18.5],[44. , 24. , 56. , 16. ],[68. , 52. , 94. , 54. ],[42. , 20. , 60. , 16. ]])a04=np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a03)
print(a04)#a04为分数形式
array([[Fraction(83, 2), Fraction(51, 2), Fraction(103, 2), Fraction(37, 2)],[Fraction(44, 1), Fraction(24, 1), Fraction(56, 1), Fraction(16, 1)],[Fraction(68, 1), Fraction(52, 1), Fraction(94, 1), Fraction(54, 1)],[Fraction(42, 1), Fraction(20, 1), Fraction(60, 1), Fraction(16, 1)]], dtype=object)

二、矩阵求逆

分别使用numpy和sympy实现,代码如下:

import numpy as np
from fractions import Fraction#numpy实现
a01=np.random.randint(5,size=(2,2))
print(a01)
array([[4, 0],[3, 4]])
a02 = np.linalg.inv(a01.astype(float))#求逆矩阵
print(a02)
array([[ 0.25  ,  0.    ],[-0.1875,  0.25  ]])a03=np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a02)
print(a03)#分数形式
array([[Fraction(1, 4), Fraction(0, 1)],[Fraction(-3, 16), Fraction(1, 4)]], dtype=object)#sympy实现
a04=Matrix([[4,0],[3,4]])
print(a04)
Matrix([
[4, 0],
[3, 4]])
print(a04.inv())
Matrix([
[  1/4,   0],
[-3/16, 1/4]])

从求解结果分析,sympy会自动给出结果的简洁形式,如果是分数则用分数表示,在展示效果上优于numpy。

三、矩阵特征值与特征向量求解

分别使用numpy和sympy实现,代码如下:

import numpy as np
from sympy import Matrix#numpy实现
a01=np.array([[-1,2,0],[0,3,0],[2,1,-1]])
print(a01)
array([[-1,  2,  0],[ 0,  3,  0],[ 2,  1, -1]])
eigenvalue, featurevector = np.linalg.eig(a01)
print(eigenvalue)
array([-1., -1.,  3.])
print(featurevector)
array([[ 0.00000000e+00,  1.11022302e-16,  4.08248290e-01],[ 0.00000000e+00,  0.00000000e+00,  8.16496581e-01],[ 1.00000000e+00, -1.00000000e+00,  4.08248290e-01]])#sympy实现
a02=Matrix([[-1,2,0],[0,3,0],[2,1,-1]])
print(a02)
Matrix([
[-1, 2,  0],
[ 0, 3,  0],
[ 2, 1, -1]])
print(a02.eigenvals())
{3: 1, -1: 2}#3: 1意为特征值为3,个数为1个,-1: 2意为特征值为-1,个数为2个
print(a02.eigenvects())
[(-1, 2, [Matrix([
[0],
[0],
[1]])]), (3, 1, [Matrix([
[1],
[2],
[1]])])]

从求解结果看,sympy的求解结果比numpy求解结果更为直观

四、矩阵约当标准型与转换矩阵求解

矩阵约当标准型与转换矩阵使用numpy求解较为繁琐,因此使用sympy求解,代码如下:

from sympy import Matrixa01=Matrix([[-1,2,0],[0,3,0],[2,1,-1]])
print(a01)
Matrix([
[-1, 2,  0],
[ 0, 3,  0],
[ 2, 1, -1]])
p_mat,j_mat=a01.jordan_form()#p_mat为转换矩阵,j_mat为约当标准型
print(p_mat)
Matrix([
[0, 1, 1],
[0, 0, 2],
[2, 0, 1]])
print(j_mat)
Matrix([
[-1,  1, 0],
[ 0, -1, 0],
[ 0,  0, 3]])

注意sympy求解的约当标准型的1放在上三角,有些数学教材中将1放在下三角。

五、矩阵奇异值分解

sympy不直接支持矩阵奇异值的求解,因此使用numpy求解,代码如下:

import numpy as npa02=np.array([[4,0],[3,0],[0,0]])
print(a02)
array([[4, 0],[3, 0],[0, 0]])
U, S, Vt = np.linalg.svd(a02)
print(U)#左奇异向量组成的酉矩阵
array([[-0.8, -0.6,  0. ],[-0.6,  0.8,  0. ],[ 0. ,  0. ,  1. ]])
print(S)#奇异值
array([5., 0.])
print(Vt)#右奇异向量组成的酉矩阵
array([[-1., -0.],[ 0.,  1.]])

奇异向量组成的酉矩阵并不唯一。

六、矩阵方程组求解

使用sympy求解,代码如下:

from sympy import Matrix, symbols, linsolveA = Matrix([[2,3,1],[4,2,3], [7,1,-1]])
print(A)
Matrix([
[2, 3,  1],
[4, 2,  3],
[7, 1, -1]])
B = Matrix([[4],[17],[1]])
print(B)
Matrix([
[ 4],
[17],
[ 1]])
x, y, z = symbols('x y z')
result=linsolve((A,B),x,y,z)
print(result)
{(1, -1, 5)}A = Matrix([[1,1,1,1],[4,3,5,-1], [2,1,3,-3]])
print(A)
Matrix([
[1, 1, 1,  1],
[4, 3, 5, -1],
[2, 1, 3, -3]])
B = Matrix([[-1],[-1],[1]])
print(B)
Matrix([
[-1],
[-1],
[ 1]])
x, y, z = symbols('x y z')
result=linsolve((A,B),x,y,z)
print(result)
{(2 - 2*z, z - 3, z)}

从示例代码可看出,sympy可以解参数矩阵非奇异时的方程组,也可以解参数矩阵奇异时的方程组,并且给出通解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节,它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法,如全站仪测量,主要依赖于现场人工操作,存在一些明显的局限性,例如作业时间长、工作量大…

【JavaWeb后端学习笔记】Spring Task实现定时任务处理

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 主要的应用场景有:纪念日提醒,处理订单未支付,还款提醒等。 1、corn表达式 使用Spring Task首先需要了解corn表达式,通过cor…

健康养生:拥抱生活的艺术

健康养生:拥抱生活的艺术 在快节奏的现代生活中,健康已成为我们最宝贵的财富。健康养生,不仅仅是一种生活方式的选择,更是一种对待生活的态度,它关乎于如何在日常中寻找到平衡,让身心得以滋养,…

【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;print 函数操作> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;转义字符使用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <…

K8s ConfigMap的基础功能介绍

在 Kubernetes 中&#xff0c;ConfigMap 是一种用于管理配置信息的资源对象&#xff0c;它允许你将 配置信息与代码解耦&#xff0c;方便管理和更新应用配置&#xff0c;而无需重新构建镜像或重启服务。 ConfigMap 的功能 存储配置信息&#xff1a; 可以以 键值对 的形式存储配…

C++算法第九天

本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 暴力解法 二分解法 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 重点回顾 朴素二分 非朴素二分 重点一 重点二 重点三 第一题 题目链接 153. 寻找旋转排序数组中的最小值 - 力…

Mysql学习笔记之SQL-2

上篇文章介绍了SQL语句的第一部分数据定义语言&#xff08;DDL)&#xff0c;这篇文章我们介绍SQL语句的第二部分&#xff0c;数据库操作语言&#xff08;DML&#xff09; 1.简介 DML全称&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据表中的数据…

Mybatisplus的学习

一、条件查询部分 在引入mybatisplus的依赖以后,我们不需要再引入mybatis的依赖,因为mybatisplus中已经包含mybatis的依赖。 1自动映射规则 变量名称:private String name 属性名:public String getName(){return name; } 这个getName 中的name就是属性名称 表名和实…

jenkins+docker部署springboot+vue项目

后端的Dockerfile和docker启动脚本 FROM openjdk:17COPY . /home/ProjectSpace/cli/extranet/serverCOPY simsun.ttf /usr/share/fonts/chinese/simsun.ttfWORKDIR /home/ProjectSpace/cli/extranet/serverCMD java -Dspring.config.location/home/ProjectSpace/cli/extranet/…

opencv-python的简单练习

题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2&#xff1a;…

AOP实现操作日志记录+SQL优化器升级

文章目录 1.引入依赖1.sun-dependencies 指定依赖2.将sun-dependencies进行install3.sun-common-log引入依赖 2.sun-common-log代码实现1.LogAspect.java&#xff08;需要更改包时就修改Pointcut的切点表达式即可&#xff09;2.log4j2-spring.xml3.效果展示 3.SQL优化器升级1.目…

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒&#xff08;WCH&#xff09;推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍&#xff1a; 主要特性 双模蓝牙支持&#xff1a; 支持蓝牙5.0标准&#xff0…

AI技术在演示文稿制作中的应用一键生成PPT

在快节奏的现代工作环境中&#xff0c;时间就是金钱。为了提高工作效率&#xff0c;许多专业人士都在寻找能够快速生成演示文稿&#xff08;PPT&#xff09;的工具。本文将探讨AI技术如何帮助用户自动生成演示文稿&#xff0c;从文案撰写到排版&#xff0c;最终输出成品&#x…

【Redis篇】Set和Zset 有序集合基本使用

目录 Set 基本命令 sadd SMEMBERS SISMEMBER SCARD 返回值&#xff1a; SPOP SMOVE SREM 集合间操作 交集&#xff1a; 并集&#xff1a; 差集&#xff1a; ​编辑 内部编码 使用场景&#xff1a; Zset 有序集合 Zset基本命令 ZADD ZCARD ZCOUNT ZRANGE …

OpenCV相机标定与3D重建(25)计算两个三维点集之间的最优仿射变换矩阵(3x4)函数estimateAffine3D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算两个3D点集之间的最优仿射变换。 它计算 [ x y z ] [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ X Y Z ] [ b 1 b 2 b 3 ] \beg…

安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用

Liveweb平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全程监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; 由于执法记…

技术理性角度思考:游戏是什么?

1、从单纯技术理性角度来看&#xff0c;游戏就是若干事件的组合&#xff0c; 每一个事件都是若干代码控制的若干动画。通过各种事件&#xff0c;玩家持续输入&#xff0c;改变游戏状态&#xff0c;获得输出结果。 细分为界面切换事件&#xff0c;游戏逻辑事件&#xff0c; a…

Jenkins 编写Pipeline 简介及使用初识详解

一、Jenkins Pipeline简介 Jenkins Pipeline是Jenkins的一个重要功能,Jenkins 2.0 以上才会有,一系列 Jenkins 插件将整个持续集成用解释性代码 Jenkinsfile 来描述,它允许开发者以代码的方式定义整个持续集成和交付(CI/CD)流程,包括构建、测试、部署和监控等步骤。Jenk…

构建一个rust生产应用读书笔记四(实战1)

我们需要从访客那里收集哪些信息&#xff0c;以便将其登记为电子邮件通讯的订阅者&#xff1f; 电子邮件地址&#xff1a;这是最基本的要求&#xff0c;因为我们需要通过电子邮件地址向订阅者发送内容。姓名&#xff1a;虽然这不是强制性的&#xff0c;但我们希望收集一个名字…

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖&#xff0c;之前运行没有问题的&#xff0c;但有时启动会提示&#xff1a; java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…