用 python 解决线性代数中的矩阵运算
用 python 解决线性代数中的矩阵运算
- 矩阵叉乘
- 矩阵求逆
- 矩阵转置
- 假定AX=B,求解未知矩阵X
- 矩阵的行列式值|matrix|
- 未完待续。。。。。
import sys
from PyQt5.QtWidgets import *
import numpy as np
class Form(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
grid = QGridLayout()
self.setWindowTitle("矩阵行列式计算器")
self.Title = QLabel("矩阵行列式计算器")
grid.addWidget(self.Title, 0, 1)
self.Title = QLabel("作者:小潘")
grid.addWidget(self.Title, 0, 2)
titles = ['计算两矩阵叉乘', '矩阵求逆', '矩阵转置', '假定AX=B,求解未知矩阵X', '求矩阵的行列式值', '清空']
func = [self.multiplication_cross, self.cal_inverse, self.cal_transposition, self.solve_equations, self.cal_value, self.clear]
for index, title in enumerate(titles):
self.set_button(title, 1, index, grid, func[index])
self.textTitle1 = QLabel("第一个矩阵的行数:")
grid.addWidget(self.textTitle1, 3, 0)
self.hang1 = QLineEdit(self)
grid.addWidget(self.hang1, 3, 1)
self.textTitle1 = QLabel("第一个矩阵的列数:")
grid.addWidget(self.textTitle1, 3, 2)
self.lie1 = QLineEdit(self)
grid.addWidget(self.lie1, 3, 3)
self.texts1 = [self.set_text(i, 4, grid) for i in range(36)]
self.textTitle2 = QLabel("第二个矩阵的行数:")
grid.addWidget(self.textTitle2, 10, 0)
self.hang2 = QLineEdit(self)
grid.addWidget(self.hang2, 10, 1)
self.textTitle2 = QLabel("第二个矩阵的列数:")
grid.addWidget(self.textTitle2, 10, 2)
self.lie2 = QLineEdit(self)
grid.addWidget(self.lie2, 10, 3)
self.texts2 = [self.set_text(i, 11, grid) for i in range(36)]
self.setLayout(grid)
def set_button(self, title, x, y, grid, cal):
bt = QPushButton(title)
bt.setParent(self)
grid.addWidget(bt, x, y)
bt.clicked.connect(cal)
def set_text(self, i, y, grid):
text = QLineEdit(self)
grid.addWidget(text, y + i // 6, 0 + i % 6)
return text
def clear(self):
self.hang1.setText('')
self.lie1.setText('')
self.hang2.setText('')
self.lie2.setText('')
for i in range(36):
self.texts1[i].setText('')
self.texts2[i].setText('')
def get_matrix(self):
hang1 = int(self.hang1.text() if self.hang1.text() != '' else 0)
lie1 = int(self.lie1.text() if self.lie1.text() != '' else 0)
hang2 = int(self.hang2.text() if self.hang2.text() != '' else 0)
lie2 = int(self.lie2.text() if self.lie2.text() != '' else 0)
# , lie1, hang2, lie2 = , int(self.lie1.text()), int(self.hang2.text()), int(self.lie2.text())
matrix1, matrix2 = [[] for i in range(hang1)], [[] for i in range(hang2)]
for i in range(hang1):
for j in range(lie1):
matrix1[i].append(eval(self.texts1[i*6+j].text()))
for i in range(hang2):
for j in range(lie2):
matrix2[i].append(eval(self.texts2[i*6+j].text()))
return matrix1, matrix2
'''
description: 矩阵叉乘 matrix1 左乘 matrix2
param {matrix1, matrix2} 多维数组
return {matrix} 叉乘后的矩阵
Date Changed:
'''
def multiplication_cross(self):
matrix1, matrix2 = self.get_matrix()
pass
a, b = np.mat(matrix1), np.mat(matrix2)
print('叉乘后的矩阵的矩阵为:')
print(a * b)
'''
description: 矩阵求逆
param {matrix} 多维数组
return {matrix} 逆矩阵
Date Changed:
'''
def cal_inverse(self, matrix):
matrix1, matrix2 = self.get_matrix()
print('逆矩阵为:')
print(np.mat(matrix1).I)
'''
description: 矩阵转置
param {matrix} 多维数组
return {matrix} 转置矩阵
Date Changed:
'''
def cal_transposition(self, matrix):
matrix1, matrix2 = self.get_matrix()
print('转置矩阵为:')
print(np.mat(matrix1).T)
'''
description: 假定AX=B,求解未知矩阵X
param {A, B} 多维数组
return {X} 矩阵X
Date Changed:
'''
def solve_equations (self):
A, B = self.get_matrix()
print('解得X矩阵为:')
print(np.linalg.solve(A, B))
'''
description: 矩阵的行列式值|matrix|
param {matrix} 多维数组
return {number} 矩阵的行列式值
Date Changed:
'''
def cal_value(self, matrix):
matrix1, matrix2 = self.get_matrix()
print('矩阵行列式的值为:')
print(np.linalg.det(matrix1))
if __name__ == '__main__':
# 每一个PyQt5程序都需要有一个QApplication对象。sys.argv是从命令行传入的参数列表。Python脚本可以从shell中运行。这是一种通过参数来选择启动脚本的方式。
app = QApplication(sys.argv)
# 创建一个 Form 对象
form = Form()
# 将控件展示出来
form.show()
#退出中使用的消息循环,结束消息循环时就退出程序
app.exec_()
用 python 解决线性代数中的矩阵运算的更多相关文章
- 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题
Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...
- python中的矩阵运算
摘自:http://m.blog.csdn.net/blog/taxueguilai1992/46581861 python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入nu ...
- inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)
1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tool ...
- 解决python写入mysql中datetime类型遇到的问题
解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...
- python中numpy矩阵运算操作大全(非常全)!
python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...
- 在学习python的过程中,遇到的最大的困难是什么?
本人文科生,回顾自己近 2 年的Python 自学经历,有一些学习心得和避坑经验分享给大家,让大家在学习 Python 的过程中少走一些弯路!减少遇到不必要的学习困难! 首先,最开始最大的困难应该就是 ...
- 用python在excel中读取与生成随机数写入excel中
今天是我第一次发博客,就关于python在excel中的应用作为我的第一篇吧. 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再 ...
- [python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题
1.pyaudio安装大背景 最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章: python写一个录音小程序:http://blog.csdn.ne ...
- python解决四舍五入问题
小数问题是计算机编程中大部分语言都会遇到的问题,尤其是在内容中涉及到评分.金额计算等等,本人一般在解决需求中固定小数位的数字计算时,都会先将其放大整10的倍数至整数,然后计算.存储,只有在显示的时候再 ...
随机推荐
- ios web 媒体查询兼容
原文:https://blog.csdn.net/dear_zx/article/details/82785250 防止链接丢失,复制一下 兼容iphone4/4s: @media (device-h ...
- CF444C-DZY Loves Colors【线段树,set】
正题 题目链接:https://www.luogu.com.cn/problem/CF444C 题目大意 \(n\)个物品第\(i\)个颜色为\(i\),权值为\(0\).要求支持\(m\)次操作 给 ...
- 题解 CF833D Red-Black Cobweb
题目传送门 题目大意 给出一个 \(n\) 个点的树,每条边有边权和颜色 \(0,1\) ,定义一条链合法当且仅当 \(0,1\) 颜色的边数之比小于等于 \(2\) ,求所有合法的链的边权之积的积. ...
- Unity——EasyTouch摇杆插件使用
EasyTouch摇杆插件使用 Demo展示 双指缩放在电脑端无法掩饰,竖屏将就看看吧: 插件名叫EasyTouch,有需要给我留言,不想开仓库传了: 创建摇杆点这里: 初始化 On_Joystick ...
- Java项目中常用的的五大设计原则
今天我们一起来聊聊关于设计原则相关的知识点. SOLID五大原则是什么 SRP 单一责任原则 单一责任原则,从名字上我们就能比较好的去理解它.这项原则主张一个对象只专注于单个方面的逻辑,强调了职责的专 ...
- vue 解决axios请求出现前端跨域问题
vue 解决axios请求出现前端跨域问题 最近在写纯前端的vue项目的时候,碰到了axios请求本机的资源的时候,出现了访问报404的问题.这就让我很难受.查询了资料原来是跨域的问题. 在正常开发中 ...
- 【Java虚拟机2】Java类加载机制
前言 JAVA代码经过编译从源码变为字节码,字节码可以被JVM解读,使得JVM屏蔽了语言级别的限制.才有了现在的kotlin.Scala.Clojure.Groovy等语言. 字节码文件中描述了类的各 ...
- 【UE4 C++】调用外部链接库 lib静态库
简述 本例以插件形式测试 使用Lib引用,打包程序运行不用再拷贝lib文件 需要 lib 文件和 .h 头文件 lib部分的代码 .h 头文件 #pragma once #ifndef __MYTES ...
- MySQL:提高笔记-2
MySQL:提高笔记-2 学完基础的语法后,进一步对 MySQL 进行学习,第一篇为:MySQL:提高笔记-1,这是第二篇内容 说明:这是根据 bilibili 上 黑马程序员 的课程 mysql入门 ...
- sip信令跟踪工具sngrep
概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...