基于numpy实现矩阵计算器
要求
制作一个Python的矩阵计算器:
① 程序提供任意两矩阵的加、乘法运算;方阵的行列式计算、逆矩阵计算、特征分解;任意矩阵的转置等计算功能,可自行添加功能
② 从控制台通过键盘获取数据并完成以上的计算,不强制要求异常检测
③ 使用8组以上的非典型数据(如对角矩阵,单位矩阵等)进行测试并完成计算结果记录
代码要求:
① 有完整的输入输出提示与代码注释
② 至少具备题目要求所述功能
③ 能够正确输出运算结果
代码
import numpy as np
import os
import time'''1. 矩阵相加: shape2. 矩阵相乘: shape3. 行列式计算 x = y4. 逆矩阵计算 det != 05. 特征分解 x = y6. 矩阵的转置 None7. 矩阵相减 shape8. 矩阵相除 shape9. 矩阵对应相乘 shape10. 奇异值分解
'''class MatCal:"""用来进行两个矩阵进行的操作"""def __init__(self,mat1,mat2):self.__mat1 = mat1self.__mat2 = mat2def add(self):if self.__mat1.shape != self.__mat2.shape:print("两个待相加矩阵的shape不一致,无法操作")return Noneelse:return self.__mat1 + self.__mat2def multi(self):"""矩阵对应相乘"""if self.__mat1.shape != self.__mat2.shape:print("两个待相乘矩阵的shape不满足要求,无法操作")return Nonereturn self.__mat1 * self.__mat2def matmulti(self):"""矩阵相乘"""if self.__mat1.shape[1] != self.__mat2.shape[0]:print("两个待相乘矩阵的shape不满足要求,无法操作")return Nonereturn np.matmul(self.__mat1,self.__mat2)def sub(self):"""矩阵相减"""if self.__mat1.shape != self.__mat2.shape:print("两个待相减矩阵的shape不满足要求,无法操作")return Nonereturn self.__mat1 - self.__mat2def divide(self):"""矩阵相减"""if self.__mat1.shape != self.__mat2.shape:print("两个待相除矩阵的shape不满足要求,无法操作")return Nonereturn self.__mat1 / self.__mat2class MatCom:"""用来进行一个矩阵进行操作"""def __init__(self,mat):self.__mat = matdef det(self):"""计算行列式"""if self.__mat.shape[0] != self.__mat.shape[1]:print("矩阵行列数目应该相等")return Nonereturn np.linalg.det(self.__mat)def invert(self):"""计算逆矩阵"""if self.det() != None and self.det() != 0:return np.linalg.inv(self.__mat)else:return Nonedef eigs(self):"""计算矩阵特征分解"""if self.__mat.shape[0] != self.__mat.shape[1]:print("矩阵行列数目应该相等")return Nonereturn np.linalg.eig(self.__mat)# 1. 特征值, 2.特征向量def svds(self):"""矩阵奇异值分解"""return np.linalg.svd(self.__mat)# 1.左奇异 2.奇异值 3. 右奇异def trans(self):"""矩阵的转置"""return self.__mat.Tdef mkMat(row, col):"""根据row,col进行矩阵的构造"""print("----start----")arr = []for i in range(row):tmp_arr = []r = input("请输入第{:d}行内容:".format(i+1))tmp = r.split()while len(tmp) != col:print("您输入尺寸大小不正确,长度应该为:{:d}".format(col))r = input("请输入第{:d}行内容:".format(i+1))tmp = r.split()for j in range(col):tmp_arr.append(float(tmp[j]))arr.append(tmp_arr)print("----end----")return np.array(arr,dtype=np.float32)def printMat(mat):for i in range(mat.shape[0]):for j in range(mat.shape[1]):print("\t{:.1f}".format(mat[i][j]),end="")print()def show2Res(mat1,mat2,mat):print("矩阵:")printMat(mat1)print("和矩阵:")printMat(mat2)print("运算结果为:")printMat(mat)if __name__ == "__main__":str1 = "请输入想要的操作对应序号:\n 1. 矩阵相加 \n 2. 矩阵相乘 \n 3. 行列式计算 \n 4. 逆矩阵计算 \n 5. 特征分解 \n 6. 矩阵的转置\n "str2 = "7. 矩阵相减 \n 8. 矩阵相除 \n 9. 矩阵对应相乘 \n 10. 奇异值分解 \n 0. 退出 \n 请输入:"while True:a = input(str1+str2)if a == "1":print("计算两个矩阵相加 (两个矩阵的大小需要一相同)")row1,col1 = input("请输入矩阵1的行:"),input("请输入矩阵1的列:")mat1 = mkMat(int(row1),int(col1))row2,col2 = input("请输入矩阵2的行:"),input("请输入矩阵2的列:")mat2 = mkMat(int(row2),int(col2))tmp = MatCal(mat1,mat2)if tmp != None:show2Res(mat1,mat2,tmp.add())elif a == "2":print("计算两个矩阵相乘 (第一个矩阵的第二维与第二个矩阵的第一维需要相同)")row1,col1 = input("请输入矩阵1的行:"),input("请输入矩阵1的列:")mat1 = mkMat(int(row1),int(col1))row2,col2 = input("请输入矩阵2的行:"),input("请输入矩阵2的列:")mat2 = mkMat(int(row2),int(col2))tmp = MatCal(mat1,mat2)if tmp.matmulti() != None:show2Res(mat1,mat2,tmp.matmulti())elif a == "3":print("下面进行行列式计算 (请输入一个矩阵)")row1,col1 = input("请输入矩阵的行:"),input("请输入矩阵的列:")mat = mkMat(int(row1),int(col1))tmp = MatCom(mat)if tmp.det() != None: print("矩阵:")printMat(mat)print("的行列式值为:{:.2f}".format(tmp.det()))else:print("error:请重新输入")elif a == "4":print("进行逆矩阵运算(请输入一个矩阵)")row1,col1 = input("请输入矩阵的行:"),input("请输入矩阵的列:")mat = mkMat(int(row1),int(col1))tmp = MatCom(mat)if tmp.invert().all() != None: print("矩阵:")printMat(mat)print("的逆矩阵为")printMat(tmp.invert())else:print("error: 请重新输入")elif a == "5":print("进行矩阵特征分解(请输入一个矩阵)")row1,col1 = input("请输入矩阵的行:"),input("请输入矩阵的列:")mat = mkMat(int(row1),int(col1))tmp = MatCom(mat)print("矩阵:")printMat(mat)if tmp.eigs() != None: t1,t2 = tmp.eigs()print("的矩阵特征值为:")print(t1)print("特征向量为:")print(t2)else:print("error:请重新输入")elif a == "6":print("进行矩阵转置运算(请输入一个矩阵)")row1,col1 = input("请输入矩阵的行:"),input("请输入矩阵的列:")mat = mkMat(int(row1),int(col1))tmp = MatCom(mat)print("矩阵:")printMat(mat)print("的转置矩阵为")printMat(tmp.trans())elif a == "7":print("计算两个矩阵相减 (两个矩阵的大小需要一相同)")row1,col1 = input("请输入矩阵1的行:"),input("请输入矩阵1的列:")mat1 = mkMat(int(row1),int(col1))row2,col2 = input("请输入矩阵2的行:"),input("请输入矩阵2的列:")mat2 = mkMat(int(row2),int(col2))tmp = MatCal(mat1,mat2)if tmp != None:show2Res(mat1,mat2,tmp.sub())elif a == "8":print("计算两个矩阵对应相除 (两个矩阵shape应该一样)")row1,col1 = input("请输入矩阵1的行:"),input("请输入矩阵1的列:")mat1 = mkMat(int(row1),int(col1))row2,col2 = input("请输入矩阵2的行:"),input("请输入矩阵2的列:")mat2 = mkMat(int(row2),int(col2))tmp = MatCal(mat1,mat2)if tmp != None:show2Res(mat1,mat2,tmp.divide())elif a == "9":print("计算两个矩阵对应相乘 (两个矩阵shape应该一样)")row1,col1 = input("请输入矩阵1的行:"),input("请输入矩阵1的列:")mat1 = mkMat(int(row1),int(col1))row2,col2 = input("请输入矩阵2的行:"),input("请输入矩阵2的列:")mat2 = mkMat(int(row2),int(col2))tmp = MatCal(mat1,mat2)if tmp != None:show2Res(mat1,mat2,tmp.multi())elif a == "10":print("进行矩阵奇异值分解(请输入一个矩阵)")row1,col1 = input("请输入矩阵的行:"),input("请输入矩阵的列:")mat = mkMat(int(row1),int(col1))tmp = MatCom(mat)print("矩阵:")printMat(mat)t1,t2,t3 = tmp.svds()print("的左奇异值为:")print(t1)print("奇异值为:")print(t2)print("右奇异值为:")print(t3)elif a == "0":breakelse:print("输入错误")# 暂停一段时间time.sleep(2)
转载于:https://www.cnblogs.com/pprp/p/11005920.html
基于numpy实现矩阵计算器相关推荐
- numpy找到矩阵中不同元素的种类_基于NumPy和图像分类的人工神经网络构建
基于NumPy和图像分类的人工神经网络构建 本文利用NumPy系统在Python中构建人工神经网络,以便为Fruits360数据集执行图像分类应用程序. 本文提及的所有内容(即图像和源代码,不包括Fr ...
- python创建矩阵_Python创建对称矩阵的方法示例【基于numpy模块】
本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np & ...
- python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- Numpy中矩阵对象
numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...
- pb实现简单计算器的思想_【python实用编程之简单矩阵计算器实现】GUI编程
以下代码是作者闲暇时所作,对GUI界面编程有想法的朋友欢迎与作者交流 以下是一个简单的矩阵计算器实现的代码: #coding=gbk from tkinter import Tk,Menu,messa ...
- 基于FPGA的电子计算器设计(下)
今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...
- 51单片机设计简易计算机原理,基于AT89C51单片机简易计算器的设计(DOC).docx
PAGE PAGE # 基于AT89C51单片机简易计算器的设计 [摘要]单片机的出现是计算机制造技术高速发展的产物,它是嵌 入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域, 电子.科技 ...
- 基于FPGA的电子计算器设计(上)
今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...
- Python 3.8+numpy查找矩阵中所有鞍点
图书推荐: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,京东.当当.天猫均有销售. 图书封面: ...
最新文章
- 时间稍纵即逝,好久不见~ [QQ群均已解散,暂只保留UE4群]
- native2ascii插件配置
- UVa 10082 - WERTYU 解题报告 - C语言
- HDOJ(1115)多边形重心
- HTML5外贸实木家具商城网站源码
- Linux CentOS学习第7天(2018年6月14日)
- DelphiXE10.2.3 Firemonkey下窗体的编译异常处理
- u8系统怎么进服务器取数,u8服务器如何连接数据库
- qt5 开发及实例(第4版)_张厚粲现代心理与教育统计学第4版配套章节题库
- 数据时代的我们,应该拥有的大数据思维
- 这些中国扶贫路上的“组合拳”,你见过吗?
- oracle 数值加减乘除
- Process finished with exit code -1073740791 (0xC0000409)定位错误原因
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中——C语言
- 计算机软件授权使用协议,软件许可使用协议
- 单片机c语言篮球比分_单片机和C语言的篮球计时计分器设计
- 揭秘换肤技术(转载)
- 陌陌走下约炮神坛,下一步该怎么走?
- js 手机上input表单点击不弹出软键盘,jq禁用手机键盘
- Zotero 中英文文献通用快捷引用方法
热门文章
- 宝讯网捷:拼多多团长佣金怎么领?
- MFC用户名和密码的登录界面设计
- fatal: bad boolean config value ‘“false”‘ for ‘http.sslverify
- 微信公众平台 微接口 接口100 API100 接口大全(转) 开发微信功能简便了
- 利用PHP HTML5 MySQL 将表单提交的数据写到数据库
- 第十一届“认证杯”数学中国数学建模国际赛 (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL
- 解决pycharm Python helpers are not copied yet to the remote host. Please wait until remote interpreter
- C语言函数while的用法
- 常微分方程-差分方程
- ArcGIS Pro玩转NetCDF数据