热门标签 | 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




推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • C语言标准及其GCC编译器版本
    编程语言的发展离不开持续的维护和更新。本文将探讨C语言的标准演变以及GCC编译器如何支持这些标准,确保其与时俱进,满足现代开发需求。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
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社区 版权所有