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




推荐阅读
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文详细介绍了五种常用的PHP排序算法——冒泡排序、选择排序、插入排序、希尔排序和堆排序。每种算法都附有代码示例,并通过打印和延时操作来直观展示排序过程。欢迎指出任何错误。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何解决 ChinaASP.Upload 错误 '80040002',即必须添加版权信息的问题,并提供了详细的步骤和注意事项。 ... [详细]
  • 深入解析JVM内存模型与分配机制
    本文详细探讨了JVM内存结构的主要组成部分,包括Java虚拟机栈、Java堆、方法区等,并深入分析了HotSpot虚拟机的分代收集策略及其对不同内存区域的管理方式。 ... [详细]
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社区 版权所有