




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
python矩阵运算第一次看见Python的运行感觉就让我想起了matlab,于是就上网嗖嗖他在矩阵方面的运算如何,如果不想安装Matlab那么大的软件,而你又只是想计算些矩阵,python绝对够用!尤其在Linux下太方便了Python使用NumPy包完成了对N-维数组的快速便捷操作。使用这个包,需要导入numpy。SciPy包以NumPy包为基础,大大的扩展了numpy的能力。为了使用的方便,scipy包在最外层名字空间中包括了所有的numpy内容,因此只要导入了scipy,不必在单独导入numpy了!但是为了明确哪些是numpy中实现的,哪些是scipy中实现的,本文还是进行了区分。以下默认已经:import numpy as np 以及 impor scipy as sp下面简要介绍Python和MATLAB处理数学问题的几个不同点。1.MATLAB的基本是矩阵,而numpy的基本类型是多为数组,把matrix看做是array的子类。2.MATLAB的索引从1开始,而numpy从0开始。1.建立矩阵a1=np.array(1,2,3,dtype=int) #建立一个一维数组,数据类型是int。也可以不指定数据类型,使用默认。几乎所有的数组建立函数都可以指定数据类型,即dtype的取值。a2=np.array(1,2,3,2,3,4) #建立一个二维数组。此处和MATLAB的二维数组(矩阵)的建立有很大差别。同样,numpy中也有很多内置的特殊矩阵:b1=np.zeros(2,3) #生成一个2行3列的全0矩阵。注意,参数是一个tuple:(2,3),所以有两个括号。完整的形式为:zeros(shape,dtype=)。相同的结构,有ones()建立全1矩阵。empty()建立一个空矩阵,使用内存中的随机值来填充这个矩阵。b2=identity(n) #建立n*n的单位阵,这只能是一个方阵。b3=eye(N,M=None,k=0) #建立一个对角线是1其余值为0的矩阵,用k指定对角线的位置。M默认None。此外,numpy中还提供了几个like函数,即按照某一个已知的数组的规模(几行几列)建立同样规模的特殊数组。这样的函数有zeros_like()、empty_like()、ones_like(),它们的参数均为如此形式:zeros_like(a,dtype=),其中,a是一个已知的数组。c1=np.arange(2,3,0.1) #起点,终点,步长值。含起点值,不含终点值。c2=np.linspace(1,4,10) #起点,终点,区间内点数。起点终点均包括在内。同理,有logspace()函数d1=panion(a) #伴随矩阵d2=np.linalg.triu()/tril() #作用同MATLAB中的同名函数e1=np.random.rand(3,2) #产生一个3行2列的随机数组。同一空间下,有randn()/randint()等多个随机函数fliplr()/flipud()/rot90() #功能类似MATLAB同名函数。xx=np.roll(x,2) #roll()是循环移位函数。此调用表示向右循环移动2位。2.数组的特征信息先假设已经存在一个N维数组X了,那么可以得到X的一些属性,这些属性可以在输入X和一个.之后,按tab键查看提示。这里明显看到了Python面向对象的特征。X.flags #数组的存储情况信息。X.shape #结果是一个tuple,返回本数组的行数、列数、X.ndim #数组的维数,结果是一个数X.size #数组中元素的数量X.itemsize #数组中的数据项的所占内存空间大小X.dtype #数据类型X.T #如果X是矩阵,发挥的是X的转置矩阵X.trace() #计算X的迹np.linalg.det(a) #返回的是矩阵a的行列式np.linalg.norm(a,ord=None) #计算矩阵a的范数np.linalg.eig(a) #矩阵a的特征值和特征向量np.linalg.cond(a,p=None) #矩阵a的条件数np.linalg.inv(a) #矩阵a的逆矩阵3.矩阵分解常见的矩阵分解函数,numpy.linalg均已经提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些算法为了方便计算或者针对不同的特殊情况,还给出了多种调用形式,以便得到最佳结果。4.矩阵运算np.dot(a,b)用来计算数组的点积;vdot(a,b)专门计算矢量的点积,和dot()的区别在于对complex数据类型的处理不一样;innner(a,b)用来计算内积;outer(a,b)计算外积。专门处理矩阵的数学函数在numpy的子包linalg中定义。比如np.linalg.logm(A)计算矩阵A的对数。可见,这个处理和MATLAB是类似的,使用一个m后缀表示是矩阵的运算。在这个空间内可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常规exp()对应有三种矩阵形式:expm()使用Pade近似算法、expm2()使用特征值分析算法、expm3()使用泰勒级数算法。在numpy中,也有一个计算矩阵的函数:funm(A,func)。5.索引numpy中的数组索引形式和Python是一致的。如:x=np.arange(10)print x2 #单个元素,从前往后正向索引。注意下标是从0开始的。print x-2 #从后往前索引。最后一个元素的下标是-1print x2:5 #多个元素,左闭右开,默认步长值是1print x:-7 #多个元素,从后向前,制定了结束的位置,使用默认步长值print x1:7:2 #指定步长值x.shape=(2,5) #x的shape属性被重新赋值,要求就是元素个数不变。2*5=10print x1,3 #二维数组索引单个元素,第2行第4列的那个元素print x0 #第一行所有的元素y=np.arange(35).reshape(5,7) #reshape()函数用于改变数组的维度print y1:5:2,:2 #选择二维数组中的某些符合条件的元素Python科学计算包 NumPy文档:8.2矩阵对象注:NumPy是Numarray的后继者,用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。今天我想在网上找一些关于NumPy的介绍,并试一下用NumPy求逆矩阵的时候,竟然找不到任何中文的资料,有网友在论坛请教“怎么用python进行矩阵求逆”,也无一人回答。因此我找到NumPy的官方文档,其中有一小节内容是介绍矩阵对象的,于是我就把这一节翻译成中文,作出点微小的贡献,时间较短,没怎么检查拼写错误,有问题请原谅。翻译者:Keengle。8.2 矩阵(Matrix)对象Matrix类型继承于ndarray类型,因此含有ndarray的所有数据属性和方法。Matrix类型与ndarray类型有六个重要的不同点,当你把Matrix对象当arrays操作时,这些不同点会导致非预期的结果。1)Matrix对象可以使用一个Matlab风格的字符串来创建,也就是一个以空格分隔列,以分号分隔行的字符串。2)Matrix对象总是二维的。这包含有深远的影响,比如m.ravel()的返回值是二维的,成员选择的返回值也是二维的,因此序列的行为与array会有本质的不同。3)Matrix类型的乘法覆盖了array的乘法,使用的是矩阵的乘法运算。当你接收矩阵的返回值的时候,确保你已经理解这些函数的含义。特别地,事实上函数asanyarray(m)会返回一个matrix,如果m是一个matrix。4)Matrix类型的幂运算也覆盖了之前的幂运算,使用矩阵的幂。根据这个事实,再提醒一下,如果使用一个矩阵的幂作为参数调用asanarray(.)跟上面的相同。5)矩阵默认的_array_priority_是10.0,因而ndarray和matrix对象混合的运算总是返回矩阵。6)矩阵有几个特有的属性使得计算更加容易,这些属性有:(a) .T 返回自身的转置(b) .H 返回自身的共轭转置(c) .I 返回自身的逆矩阵(d) .A 返回自身数据的2维数组的一个视图(没有做任何的拷贝)Matrix类是ndarray的一个Python子类,你也可以学习这个实现来构造自己的ndarray子类。Matrix对象也可以使用其它的Matrix对象,字符串,或者其它的可以转换为一个ndarray的参数来构造。另外,在NumPy里,“mat”是“matrix”的一个别名。例1: 使用字符串构造矩阵 from numpy import * a=mat(1 2 3; 4 5 3) print (a*a.T).I 0.29239766 -0.13450292-0.13450292 0.08187135例2: 使用嵌套序列构造矩阵 mat( 1,5,10,1.0,3,4j )matrix( 1.+0.j, 5.+0.j, 10.+0.j, 1.+0.j, 3.+0.j, 0.+4.j)例3: 使用一个数组构造矩阵 mat( random.rand(3,3) ).Tmatrix( 0.81541602, 0.73987459, 0.03509142, 0.14767449, 0.60539483, 0.05641679, 0.43257759, 0.628695 , 0.47413553)Matrix( data, dtype=None, copy=True )将以参数data传进来的数据转换为矩阵。如果dtype是None,那么数据类型将由data的内容来决定。如果copy为True,则会拷贝data中的数据,否则会使用原来的数据缓冲。如果没有找到数据的缓冲区,当然也会进行数据的拷贝。注意:矩阵matrix事实上是一个类型,因此当你构造实例的时候会调用matrix._new_(matrix, data, dtype, copy)。Mat只是matrix的一个别名。Asmatrix(data, dtype=None)返回不经过复制的数据。等价于matrix(data, dtype, copy=False)。Bmat(obj, ldict=None, gdict=None)使用一个字符串,嵌套的序列或者一个数组(array)构造一个矩阵。这个命令允许你从其它的对象来建立起矩阵。其中当obj是一个字符串的时候才会使用参数ldict和gdict,这两个参数是局部和模块的字典。如果你没有提供它们,这些将由系统提供。 A=mat(2 2; 2 2); B=mat(1 1; 1 1); print bmat(A B; B A)2 2 1 12 2 1 11 1 2 21 1 2 2python的二维数组操作 需要在程序中使用二维数组,网上找到一种这样的用法:?123456#创建一个宽度为3,高度为4的数组#0,0,0, # 0,0,0,# 0,0,0,# 0,0,0myList = 0 * 3 * 4但是当操作myList01 = 1时,发现整个第二列都被赋值,变成0,1,0, 0,1,0, 0,1,0, 0,1,0 为什么.一时搞不懂,后面翻阅The Python Standard Library 找到答案list * nn shallow copies of list concatenated, n个list的浅拷贝的连接例:?123456 lists = * 3 lists, ,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《幼儿教师招聘》考前冲刺测试卷附有答案详解含答案详解【a卷】
- 教师招聘之《幼儿教师招聘》考试彩蛋押题含答案详解(综合卷)
- 2025一建《水利水电工程管理与实务》考前十页纸(填空版)
- 教师招聘之《小学教师招聘》题库(得分题)打印附参考答案详解【a卷】
- 微某著名企业
- 教师招聘之《幼儿教师招聘》强化训练附参考答案详解(精练)
- 教师招聘之《幼儿教师招聘》强化训练题型汇编及完整答案详解一套
- 押题宝典教师招聘之《幼儿教师招聘》模考模拟试题含答案详解【培优a卷】
- 押题宝典教师招聘之《小学教师招聘》通关考试题库附答案详解(预热题)
- 教师招聘之《小学教师招聘》能力提升题库及答案详解【夺冠系列】
- 快递公司快递员操作流程预案
- 高中语文++《大学之道》课件++统编版高中语文选择性必修上册
- 2022-2023年度省职业院校学生专业技能大赛装配式建筑智能建造赛项竞赛规程
- 化工产品销售管理制度
- 闽2023-G-01先张法预应力高强混凝土管桩DBJT13-95
- 前列腺电切手术
- 掌握敏锐观察和细节把控的沟通技巧
- 贵州省安顺市平坝区第二中学2023-2024学年七年级数学第一学期期末考试模拟试题含解析
- 2024年中国融通旅业发展集团有限公司招聘笔试参考题库附带答案详解
- 民谣酒馆创业计划书
- 电工安全常识课件
评论
0/150
提交评论