今日,分享点Python学习小记,利用Python实现以下目的:

(1)判定是否为方阵

矩阵的本质就是映射。对于一个m×n的矩阵A,y=Ax的作用是将向量从n维原始空间中的x坐标位置,映射到m维目标空间中的y坐标位置,这是正向映射的结果。如果用y去反推x的过程,被称为逆映射或逆问题。表征逆映射的矩阵为矩阵A的逆矩阵。

对于“矮胖”矩阵(即m<n)压缩空间,不存在逆映射,也即不存在逆矩阵;

对于“高瘦”矩阵(即m>n)不存在逆映射,目标空间无法全覆盖,即也不存在逆矩阵。

方阵是逆映射存在必要不充分条件。

(2) 判定是否矩阵可逆

在(1)的基础上,已知矩阵A为方阵,判定矩阵A是否可逆最简单的方法——求秩。如果秩小于行数或列数,那么该矩阵不可逆;如果秩等于行数或列数,则该矩阵可逆。

(3) 求解特征数和特征向量

该问题建立在矩阵为方阵的基础上。

整个编程思路为:

进行矩阵计算,需要numpy和scipy第三方库的支持。首先,引入第三方库:

import numpy as npfrom scipy import linalg

python输入矩阵方式有(以三阶单位阵为例):

(1)

A = np.matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])

(2)

A = np.array([[1, 0, 0],              [0, 1, 0],              [0, 0, 1]])

python输入矩阵的体验确实不如Matlab,如果你只是单纯想体验python求解逆矩阵或求特征值和特征向量的过程,不想自己输入矩阵的话,我们可以利用python生成随机矩阵,我这里设置的随机行列数为3~5。

import randomA = np.random.rand(random.randint(3,5), random.randint(3,5))print(A)row = A.shape[0]col = A.shape[1]print("这是一个 {0} 行 {1} 列的矩阵。".format(row,col))

利用print语句打印出生成的随机矩阵,利用shape语句计算随机矩阵的行和列,接下来需要判定这个随机矩阵A是否为方阵,就要引入if-else条件语句。

#若A不是方阵if row != col:    print("该矩阵不存在可逆矩阵。")#若A为方阵else:   进行特征值和特征向量计算

计算特征值和特征向量的命令为scipy库的linalg语句。一个方阵有几行(列)意味着有几个特征值以及对应的特征向量。

print("该矩阵有 {} 个特征值,分别为:".format(row))# 求解特征值和特征向量evalue, evector = linalg.eig(A)for i in range(row):    print("{0} 对应特征向量为 {1}".format(evalue[i], evector[i]))

然后,进行判定矩阵是否可逆,求秩的python语句为np.linalg.matrix_rank。接着根据秩数与行(列)数的关系,进行进一步的判定,这里又要用到if-else语句。

rank = np.linalg.matrix_rank(A)if rank != row:    print("该矩阵不存在可逆矩阵。")else:    #求逆矩阵    Ainv = linalg.inv(A)    print("该矩阵的逆矩阵为:{}".format(Ainv))    #验证逆矩阵    print(np.dot(A, Ainv)

如果你不想使用随机矩阵,想自己输入矩阵分析也是可以实现的。若单纯使用input语句在命令行里输入矩阵,会出现以下情况:

可见,通过input语句输入的数据为str(字符串)格式,无法判别矩阵的行数和列数,也就不能进行下一步的分析。同时,我们也可以看出list(列表)格式,便于生成矩阵,而且在命令行中不需要输入np.matrix或np.array的前缀。只要确保输入的数据为list格式,就可以进行接下来的分析。我们可以用下面的语句实现这个想法。

import astA = ast.literal_eval(input('请输入矩阵(按行输入,逗号隔开):')分析的代码

如果只是简单把上面的代码进行一个整合,程序确实可以正常的运行,但是每当你想去计算一个矩阵时,都要重新进行调试状态,重新在cmd命令行输入语句,我们可以给整个代码设计一个循环,由我们自己决定什么时候退出程序,这里就可以使用while命令行,所以整个代码如下:

import numpy as npfrom scipy import linalgimport randomimport ast#import timewhile True:    content = input('输入指令(输入"m"自行输入矩阵;输入"r"生成随机矩阵;输入"q"退出程序): ')    if content == "q":        break    elif content == "r":        A = np.random.rand(random.randint(3,5), random.randint(3,5))        print(A)        row = A.shape[0]        col = A.shape[1]        print("这是一个 {0} 行 {1} 列的矩阵".format(row,col))        if row != col:            print("该矩阵不存在可逆矩阵")        else:            print("该矩阵有 {} 个特征值,分别为:".format(row))            evalue, evector = linalg.eig(A)            for i in range(row):                print("{0} 对应特征向量为 {1}".format(evalue[i],evector[i]))            rank = np.linalg.matrix_rank(A)            if rank != row:                print("该矩阵不存在可逆矩阵.")            else:                Ainv = linalg.inv(A)                print("该矩阵的逆矩阵为: {}".format(Ainv))                print(np.dot(A, Ainv))    elif content == "m":        A = ast.literal_eval(input('请输入矩阵(按行输入,逗号隔开):'))        A = np.matrix(A)        row = A.shape[0]        col = A.shape[1]        if row != col:            print("该矩阵不存在可逆矩阵")        else:            print("该矩阵有 {} 个特征值,分别为:".format(row))            evalue, evector = linalg.eig(A)            for i in range(row):                print("{0} 对应特征向量为 {1}".format(evalue[i], evector[i]))            rank = np.linalg.matrix_rank(A)            if rank != row:                print("该矩阵不存在可逆矩阵.")            else:                Ainv = linalg.inv(A)                print("该矩阵的逆矩阵为: {}".format(Ainv))                print(np.dot(A, Ainv))    #time.sleep(2)

最后,可以根据自己需要决定是否引入time模块,因为这个过程不涉及爬虫的环节,所有有无time模块都可以,并不影响程序运行。

参考书:

[1] 张雨萌.机器学习线性代数基础(Python语言描述)

[2]小甲鱼.零基础入门学习Python(第一版)

[3]小甲鱼.零基础入门学习Python(第二版)

c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量相关推荐

  1. python计算特征值特征向量_使用Python求解特征值、特征向量及奇异值分解(SVD)...

    SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵.假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:A=UΣVT 其中U是一个m×m的矩阵,Σ是一个m×n ...

  2. python读取csv求平均数_利用Python读取CSV文件并计算某一列的均值和方差

    近日需要对excel的csv文件进行处理,求取某银行历年股价的均值方差等一系列数据 文件的构成很简单,部分如下所示 总共有接近七千行数据,主要的工作就是将其中的股价数据提取出来,放入一个数组之中,然后 ...

  3. python读单行文本求平均值_利用Python读取json数据并求数据平均值

    要做的事情:一共十二个月的json数据(即12个json文件),json数据的一个单元如下所示.读取这些数据,并求取各个(100多个)城市年.季度平均值. { "time_point&quo ...

  4. python输入坐标求面积_利用python中的坐标计算多边形面积

    您没有正确实现Shoelace formula.我修改了一点你的代码来修复它:sum1=0.0 sum2=0.0 b=input("Number of corners: ") ma ...

  5. 使用python求解特征值与特征向量

    #使用python求解特征值与特征向量 问题描述: 求解矩阵[[1.25,0.375,0],[0.375,1.25,-0.5],[0,-0.5,0.875]]的特征值与特征向量 参考链接1: 百度经验 ...

  6. python求矩阵的秩_【案例】求出矩阵的最简型?——sympy登场

    案例介绍 学过线性代数的同学都知道,在将矩阵进行初等变换化为最简型时过程有多么繁琐.今天,给大家带来一个小项目--使用 Python 化简矩阵. 将要学习:使用特殊的科学计算库--sympy,来化简矩 ...

  7. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  8. python找列表中相邻数的个数_利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的 ...

  9. python编写递归函数、求斐波那契数列_利用Python实现斐波那契数列的方法实例

    今天我们来使用Python实现递归算法求指定位数的斐波那契数列 首先我们得知道斐波那契数列是什么? 斐波那契数列又叫兔子数列 斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推 ...

最新文章

  1. 代码 设计 生活 (2)--- 菜鸟
  2. 个推无法获取个推id_最新个推Android 推送 SDK Maven 集成
  3. linux虚拟机网络查看的方式
  4. dell r740如何做raid_戴尔入门级4K、IPS广色域显示器:S2721QS表现如何?
  5. boost::statechart模块实现状态转换测试
  6. linux单线程处理多个请求,redis是单线程的,如何处理并发请求?
  7. Javasript设计模式之链式调用
  8. easyui根据select下拉框内容更新表单内容_Ant Design 4.0 的一些杂事儿 - Select 篇
  9. android 炫酷3d主页,五款超酷安卓手机3D桌面软件合辑推荐
  10. mysql 内置存储过程_mysql 内置存储过程
  11. .NET反编译工具Reflector及插件Reflector.FileDisassembler.dll
  12. 在virtualbox上安装64位centos7和virtual增强工具以及设置共享文件夹
  13. 内是不是半包围结构_什么是结构化面试、无领导小组讨论、结构化小组面试?教你快速搞懂国考面试三大形式。...
  14. Fiddler4——手机抓包
  15. 关于腾讯云搭建代理服务器的详细过程
  16. Mysql根据出生日期计算年龄
  17. 曙光服务器bios开启vt虚拟化,VT开启教程 BIOS开启VT方法
  18. 小程序生成图片保存到系统相册_iSee图片专家下载|iSee图片专家 3.930 官方版
  19. 一款表达谱数据分析的神器--CCLE--转载
  20. C语言中memcpy()和memcpy_s()的区别

热门文章

  1. Python学习笔记(四)—生成随机数
  2. PyTorch学习笔记(四):PyTorch基础实战
  3. 大数据常见的处理方法有哪些
  4. 如何针对数据进行分析
  5. java 53个关键字_java的保留(53个)关键字v11.docx
  6. android 自定义edittext方框样式,Android之EditText自定义边框和边框颜色(转载)
  7. AcWing 1813. 方块游戏(暴力枚举)
  8. win10卸载电脑管家就蓝屏_新电脑WIN10出现蓝屏 系统重装也不行
  9. 火影忍者服务器维护时间,火影手游12月12日更新:仙鸣增加破霸体,小自来也变蛙时间减半!...
  10. 将mysql数据库中的图片读出来的_MySQL存入图片+Qt读入读出数据库中的图片