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




推荐阅读
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文深入探讨了 Python 中的循环结构(包括 for 循环和 while 循环)、函数定义与调用,以及面向对象编程的基础概念。通过详细解释和代码示例,帮助读者更好地理解和应用这些核心编程元素。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
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社区 版权所有