用 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 解决线性代数中的矩阵运算的更多相关文章

  1. 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题

    Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...

  2. python中的矩阵运算

    摘自:http://m.blog.csdn.net/blog/taxueguilai1992/46581861 python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入nu ...

  3. inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)

    1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tool ...

  4. 解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...

  5. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...

  6. 在学习python的过程中,遇到的最大的困难是什么?

    本人文科生,回顾自己近 2 年的Python 自学经历,有一些学习心得和避坑经验分享给大家,让大家在学习 Python 的过程中少走一些弯路!减少遇到不必要的学习困难! 首先,最开始最大的困难应该就是 ...

  7. 用python在excel中读取与生成随机数写入excel中

    今天是我第一次发博客,就关于python在excel中的应用作为我的第一篇吧. 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再 ...

  8. [python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题

    1.pyaudio安装大背景 最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章: python写一个录音小程序:http://blog.csdn.ne ...

  9. python解决四舍五入问题

    小数问题是计算机编程中大部分语言都会遇到的问题,尤其是在内容中涉及到评分.金额计算等等,本人一般在解决需求中固定小数位的数字计算时,都会先将其放大整10的倍数至整数,然后计算.存储,只有在显示的时候再 ...

随机推荐

  1. frida的安装教程-配合夜神模拟器

    Frida安装 一.PC端安装 1. 安装frida 默认安装最新版的Frida pip install frida 因为我用的是夜神模拟器,可能不支持最新版,所以下载的之前版本. pip insta ...

  2. 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 百篇博客分析OpenHarmony源码 | v7.07

    百篇博客系列篇.本篇为: v07.xx 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调 ...

  3. Hutool-Convert类型转换常见使用

    Convert 主要针对于java中常见的类型转化 java常见类型的转化 转化为字符串 public class HConvert { public static void main(String[ ...

  4. 洛谷4847 银河英雄传说(LCT+LCSPLAY)

    QWQ硬是把一个\(splay\)好题,做成了\(LCT\) 首先,根据题目性质,我们可以发现序列之间是具有前后性质的. 那么,我们就不可以进行\(makeroot\)等操作. 我们定义\(findr ...

  5. SpringBoot入门03-转发到Thymeleaf

    前言 Spring Boot不提倡使用jsp和用View层,而是使用Thymeleaf代替jsp,因为性能可以得到提升. 使用Thymeleaf要加入依赖 Thymeleaf不能直接被访问,它严格遵守 ...

  6. Java(12)方法的重载

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201592.html 博客主页:https://www.cnblogs.com/testero ...

  7. 【c++ Prime 学习笔记】第12章 动态内存

    对象的生存期: 全局对象:程序启动时创建,程序结束时销毁 局部static对象:第一次使用前创建,程序结束时销毁 局部自动对象:定义时创建,离开定义所在程序块时销毁 动态对象:生存期由程序控制,在显式 ...

  8. [Git系列] Git 基本概念

    版本控制系统 版本控制系统是一种帮助软件开发者实现团队合作和历史版本维护的软件,一个版本控制系统应具备以下列出的这几个基本功能: 允许开发者并发工作: 不允许一个开发者覆写另一个开发者的修改: 保存所 ...

  9. Java:重载和重写

    Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...

  10. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...