要求

制作一个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实现矩阵计算器相关推荐

  1. numpy找到矩阵中不同元素的种类_基于NumPy和图像分类的人工神经网络构建

    基于NumPy和图像分类的人工神经网络构建 本文利用NumPy系统在Python中构建人工神经网络,以便为Fruits360数据集执行图像分类应用程序. 本文提及的所有内容(即图像和源代码,不包括Fr ...

  2. python创建矩阵_Python创建对称矩阵的方法示例【基于numpy模块】

    本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np & ...

  3. python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  4. Numpy中矩阵对象

    numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...

  5. pb实现简单计算器的思想_【python实用编程之简单矩阵计算器实现】GUI编程

    以下代码是作者闲暇时所作,对GUI界面编程有想法的朋友欢迎与作者交流 以下是一个简单的矩阵计算器实现的代码: #coding=gbk from tkinter import Tk,Menu,messa ...

  6. 基于FPGA的电子计算器设计(下)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  7. 51单片机设计简易计算机原理,基于AT89C51单片机简易计算器的设计(DOC).docx

    PAGE PAGE # 基于AT89C51单片机简易计算器的设计 [摘要]单片机的出现是计算机制造技术高速发展的产物,它是嵌 入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域, 电子.科技 ...

  8. 基于FPGA的电子计算器设计(上)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  9. Python 3.8+numpy查找矩阵中所有鞍点

    图书推荐: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,京东.当当.天猫均有销售. 图书封面: ...

最新文章

  1. 时间稍纵即逝,好久不见~ [QQ群均已解散,暂只保留UE4群]
  2. native2ascii插件配置
  3. UVa 10082 - WERTYU 解题报告 - C语言
  4. HDOJ(1115)多边形重心
  5. HTML5外贸实木家具商城网站源码
  6. Linux CentOS学习第7天(2018年6月14日)
  7. DelphiXE10.2.3 Firemonkey下窗体的编译异常处理
  8. u8系统怎么进服务器取数,u8服务器如何连接数据库
  9. qt5 开发及实例(第4版)_张厚粲现代心理与教育统计学第4版配套章节题库
  10. 数据时代的我们,应该拥有的大数据思维
  11. 这些中国扶贫路上的“组合拳”,你见过吗?
  12. oracle 数值加减乘除
  13. Process finished with exit code -1073740791 (0xC0000409)定位错误原因
  14. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中——C语言
  15. 计算机软件授权使用协议,软件许可使用协议
  16. 单片机c语言篮球比分_单片机和C语言的篮球计时计分器设计
  17. 揭秘换肤技术(转载)
  18. 陌陌走下约炮神坛,下一步该怎么走?
  19. js 手机上input表单点击不弹出软键盘,jq禁用手机键盘
  20. Zotero 中英文文献通用快捷引用方法

热门文章

  1. 宝讯网捷:拼多多团长佣金怎么领?
  2. MFC用户名和密码的登录界面设计
  3. fatal: bad boolean config value ‘“false”‘ for ‘http.sslverify
  4. 微信公众平台 微接口 接口100 API100 接口大全(转) 开发微信功能简便了
  5. 利用PHP HTML5 MySQL 将表单提交的数据写到数据库
  6. 第十一届“认证杯”数学中国数学建模国际赛 (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL
  7. 解决pycharm Python helpers are not copied yet to the remote host. Please wait until remote interpreter
  8. C语言函数while的用法
  9. 常微分方程-差分方程
  10. ArcGIS Pro玩转NetCDF数据