Numpy(一)np.array与matlab matrix对比 |
您所在的位置:网站首页 › 程序中array是什么意思 › Numpy(一)np.array与matlab matrix对比 |
官方文档 A=np.array([[1,2,3],[4,5,6]]) print(A) print(A.ndim) # 行 2 print(len(A)) # 行 2 print(A.shape) # 行列元组 (2,3) print(A.shape[0]) # 元组第一个表示行 2 print(A.shape[1]) # 元组第二个表示列 3 print(np.size(A,0)) # size方法, 行 2 print(np.size(A,1)) # size方法, 列 3 print(A.size) # 元素总数一、访问单个元素,Matlab A(2,3),numpy A[2,3]或A[2][3] 二、某列,Matlab A(:,k),numpy A[:,k] 三、Axis=0是列,Axis=1是行 一、Numpy是什么Numpy代表"Numerical Python",那么Numpy是什么呢? Numpy是一个python的数字库NumPy包含多维数组和矩阵数据结构数组结构支持与三角、统计、和线性代数相关的大部分函数。Numeric和Nuarray的扩展Numpy包含随机数发生器Numpy使用C语言实现和封装Pandas对象是建立在Numpy基础上的,实现了对Numpy的扩展Scipy(Scientifc Python)和MatplotLib(Plotting Library)和它是好搭档,具备与和Matlab扳扳手腕的能力。因为numpy对矩阵的支持,像是sin(M)处理一一些列的数成为可能,不然你还得一个个处理。 二、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)object sequence序列及其嵌套。python中序列有:list[],tuple()和range。 另外,python中的参数可不必按照定义顺序传入参数,方法是使用“关键字+值”的方式。如: A=np.array([[1,2],[2,3],[3,2]],dtype='int64')注意:np.array([1,2,3])构造的既不是行向量也不是行向量,是一个shape只有一个的tuple。 赋值构造函数是浅拷贝 A=B 其他函数 统计类函数 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)函数参数如下表: 参数含义a待排数组axis排序方向,默认为最后一维kind'quicksort’默认 ‘merge sort’ ‘heap sort’orderarray含多个元素时待排元素名称例子:对矩阵 M = [ 3 8 − 1 5 10 − 2 4 − 1 3 5 8 10 ] M=\begin{bmatrix}3&8&-1\\5&10&-2\\4&-1&3\\5&8&10\end{bmatrix} M=⎣⎢⎢⎡3545810−18−1−2310⎦⎥⎥⎤按行和列排序: import numpy as np M=np.array([[3,8,1],[5,10,-2],[4,-1,3],[5,8,10]]) sorted_M=np.sort(M) #默认快排,且为axis=0(列方向),由小到大 sorted_M=np.sort(M,axis=0); #同上等价表达 sorted_MM=np.sort(M,axis=1); #aixs=1行方向我对numpy中轴的理解,以上面的矩阵 M M M为例,np.array中第一个中括号表示第1个轴,该轴存放着4个元素(也叫做长度,这就是为什么我们可以用len来表示行的原因),因为元素的内容不是单纯的数字,内含中括号,所以需要第二个轴来用来检索这个元素,上面放着三个数字。至此所有元素都是数字,所以这个array的总轴数为2。 函数 三角函数: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 np.mean np.std 运算符重载 四则运算 三、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])这种数组为列向量。 要创建包含多行的矩阵,请传入嵌套的list对象: a=np.array([[1,2,3],[4,5,6],[7,8,10]])
shape类型可以是tuple()或者list[],np.empty等价于matlab中的: A=[] 3.2 矩阵和数组运算python允许您使用单一的算数运算符或函数来处理矩阵中的所有值。 a=np.array([[1,2,3],[4,5,6],[7,8,10]]) print(a+10)结果如下: 这里python和matlab也有一点不一样,python没有将结果默认输出至终端的操作,因此,需要我们手动加上print。 a=np.array([[1,2,3],[4,5,6],[7,8,10]]) print(np.sin(a))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))结果如下: 您可以使用 dot或者matmul 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例如,确认矩阵乘以其逆矩阵可返回单位矩阵: a=np.array([[1,2,3],[4,5,6],[7,8,10]]) print(np.dot(a,np.linalg.inv(a)))结果如下: **注意事项:在python的np.array类中,矩阵运算和matlab有较大差异。 对比项矩阵乘法对应元素相乘(点乘、内积)点积(内积后加起来的一个数)差积MATLAB星号(*).*dot()crossnp.arraydot()或matmul* 或multiplyvdotcross求逆运算,python封装在np中的线性代数算法中np.linalg中,名称和matlab一样是inv,matlab还对矩阵的-1次方进行了重载,也表示求逆。 乘法、除法和幂的矩阵运算是对于每个元素的操作,类似数乘: a=np.array([1,2,3]) print(pow(a,3))结果如下: 串联是连接数组以便形成更大数组的过程。python通过调用vstack和hstack来完成串联操作。 a=np.array([1,2,3]) b=np.array([4,5,6]) print(np.hstack([a,b,b,b]))结果如下:
这一点和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,:]) #m:n的m和n在矩阵两端时,可以省略,也就是可以写成a[:2,:]特别的,访问单个元素,有两种访问方式: a[2,3] a[2][3]小结: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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |