Numpy(一)np.array与matlab matrix对比

您所在的位置:网站首页 程序中array是什么意思 Numpy(一)np.array与matlab matrix对比

Numpy(一)np.array与matlab matrix对比

2023-08-04 06:44| 来源: 网络整理| 查看: 265

官方文档

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=⎣⎢⎢⎡​3545​810−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]])

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

np.ones((5,1))

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))

结果如下: 在这里插入图片描述 matlab选择直接使用单引号来表达该运算。

您可以使用 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]))

结果如下:

在这里插入图片描述 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,:]) #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