热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

numpymatlab比较,Numpy(一)np.array与matlabmatrix对比

一、Numpy是什么Numpy代表NumericalPython’,那么Numpy是什么呢?Numpy是一个python的数字库NumPy包含多维数组


一、Numpy是什么


Numpy代表"Numerical Python’,那么Numpy是什么呢?


Numpy是一个python的数字库


NumPy包含多维数组和矩阵数据结构


数组结构支持与三角、统计、和线性代数相关的大部分函数。


Numeric和Nuarray的扩展


Numpy包含随机数发生器


Numpy使用C语言实现和封装


Pandas对象是建立在Numpy基础上的,实现了对Numpy的扩展


Scipy(Scientifc Python)和MatplotLib(Plotting Library)和它是好搭档,具备与和Matlab扳扳手腕的能力。


二、Ndarray Object


要了解一门面向对象的语言,最好的办法就是从数据成员、成员函数来认识它。


2.1 数据成员


数据成员含义ndarray.ndim列数(矩阵而言)


ndarray.shape维度信息(3,5)


ndarray.size总元素个数


ndarray.dtype元素类型


ndarray.itemsize元素所占字节数


ndarray.data内存位置


2.2 成员函数


python函数参数可以是


构造函数


numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)1


object sequence序列及其嵌套。python中序列有:list[],tuple()和range。


另外,python中的参数可不必按照定义顺序传入参数,方法是使用“关键字+值”的方式。如:


A=np.array([[1,2],[2,3],[3,2]],dtype='int64')1


赋值构造函数是浅拷贝


A=B1


其他函数


统计类函数


sort mean max min sum std var cumsum cumprod argmax argmin corrcoef cov fabs ceil floor round fmod(余数)


如sort函数:


numpy.sort(a, axis, kind, order)1


函数参数如下表:


参数含义a待排数组


axis排序方向,默认为最后一维


kind'quicksort’默认 ‘merge sort’ ‘heap sort’


orderarray含多个元素时待排元素名称


函数


三角函数:sin cos tan等;常见函数:power sqrt exp square log2 log10 log modf(小数和整数部分);矩阵构造:eyes ones empty rand


数学常量


pi e


其他库


np.random np.linalg np.polynomial np.fft n


运算符重载


四则运算


三、Compare with matlab


在matlab使用doc+命令名可以查看对应函数用法,spyder则使用help+命令名,spyder的快捷键为ctrl+I,我习惯把他设置为F1。按照matlab教程来探索一下,python中的narray!


https://ww2.mathworks.cn/help/matlab/learn_matlab/matrices-and-arrays.html


3.1 数组的创建


创建每行包含四个元素的数组,调用构造函数,传入一个list对象:


a=np.array([1,2,3,4])1


这种数组为列向量。


要创建包含多行的矩阵,请传入嵌套的list对象:


a=np.array([[1,2,3],[4,5,6],[7,8,10])1


623a0d43e4e20a6a2f95b0256147bbdb.png


创建矩阵的另一种方法是使用ones、zeros、rand和empty等函数[1]。例如创建一个由零组成的5*1列向量:


np.ones((5,1))1


shape类型可以是tuple()或者list[],np.empty等价于matlab中的:


A=[]1


3.2 矩阵和数组运算


python允许您使用单一的算数运算符或函数来处理矩阵中的所有值。


a=np.array([[1,2,3],[4,5,6],[7,8,10]])


print(a+10)1


2


结果如下:


dda5cbfd07cf61e3ded23b4081b2d1ce.png


这里python和matlab也有一点不一样,python没有将结果默认输出至终端的操作,因此,需要我们手动加上print。


a=np.array([[1,2,3],[4,5,6],[7,8,10]])


print(np.sin(a))1


2


matlab将基本的函数都封装在全局作用域中,而python需要调用numpy来完成。


要转置矩阵,请使用np.transpose成员函数,或者.T


a=np.array([[1,2,3],[4,5,6],[7,8,10]])


print(a.T)


print(np.transpose(a))1


2


3


结果如下:


036fabbd5338cd2842ab0f49172b9015.png


matlab选择直接使用单引号来表达该运算。


您可以使用 dot或者matmul 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例如,确认矩阵乘以其逆矩阵可返回单位矩阵:


a=np.array([[1,2,3],[4,5,6],[7,8,10]])


print(np.dot(a,np.linalg.inv(a)))1


2


结果如下:


dbb75802d5416856b91411a46b54beea.png


注意事项:在python得np.array类中,矩阵运算和matlab有较大差异。matlab使用.*表示点乘,*表示矩阵乘法,dot则表示维点积;而python将*或multiply定义成点乘,vdot定义成点积,矩阵乘法则为dot或者matdot;倒是叉积得结果两者是统一的。


求逆运算,python封装在np中的线性代数算法中np.linalg中,名称和matlab一样是inv,matlab还对矩阵的-1次方进行了重载,也表示求逆。


乘法、除法和幂的矩阵运算是对于每个元素的操作,类似数乘:


a=np.array([1,2,3])


print(pow(a,3))1


2


结果如下:


d5e179c362ba788fef5b7779f3a8fd81.png


串联


串联是连接数组以便形成更大数组的过程。python通过调用vstack和hstack来完成串联操作。


a=np.array([1,2,3])


b=np.array([4,5,6])


print(np.hstack([a,b,b,b]))1


2


3


结果如下:


86042074e7c62d9f3d32c9473726137c.png


vstack和hstack支持tuple、list且可以多次拼接。


这一点和matlab又有所区别,matlab则使用了中括号[] 、;和,表征矩阵的拼接。


复数


和matlab一样,python同样支持复数操作,不过使用字母j来表示复数。Matlab对复数i和j都进行了辨识,且系数为1时也可以不写,符合人的书写习惯。


ps:1+i复数应该写成1+1j,1是不可省略的。


切片


a=np.array([[1,2,3],[4,5,6],[7,8,10]])


print(a[0:2,:])1


2


小结:Matlab的矩阵操作,相对于Numpy.array而言,Matlab更加顺手、更加简洁:


Matlab符号利用率高,人性化。如转置',范围[s:step:e]、^n求n次方 -1求逆,i或 j复数都可以表示,同时系数为1时不用写成1j,拼接的时候[,]和[;]表意明确,不用额外调用函数


Matlab的函数都封装在其大命名空间,不需要通过对象调用 cross max等


要注意区别:


Matlab下标从1开始,而np.array则从0开始


范围[s:step:e]是闭区间,np.arrange(s,e,step)左闭右开


在一些函数上有区别,如Matlab的矩阵间的*表示的是矩阵乘法,而在Python中则为点乘


[1]https://ww2.mathworks.cn/help/matlab/learn_matlab/matrices-and-arrays.html


[2](Why Should We Use NumPy?) https://medium.com/fintechexplained/why-should-we-use-numpy-c14a4fb03ee9




推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了开关稳压器设计中PCB布局布线的重要性,并提供了相应的准则。开关稳压器作为一种高效的电源,逐渐取代了线性稳压器。开关模式电源的工作原理是通过一定的开启时间和关闭时间来实现电压转换。开关频率并不是影响系统的最大因素,而开关转换的速度才是关键。在系统噪声方面,开关频率或其谐波可能会对系统产生影响。严格遵守PCB布局布线的准则,可以将开关模式电源的相关问题降到最小。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
author-avatar
手机用户2502893613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有