matlab和python有共同点吗_Python学习(八)Matlab和Numpy异同

参考资料:

https://github.com/lijin-THU/notes-python(相应实体书为:《自学Python——编程基础、科学计算及数据分析》)

从Matlab到Numpy

1. Numpy和Matlab比较

1582056-20190119140632718-532645880.jpg

2. array还是matrix?(数组 VS 矩阵)

Numpy 中不仅提供了array 这个基本类型,还提供了支持矩阵操作的类 matrix,但是一般推荐使用数组array:

很多 numpy 函数返回的是 array,不是 matrix

在 array 中,逐元素操作和矩阵操作有着明显的不同

向量可以不被视为矩阵

具体说来:

*, dot(), multiply()

array:* -逐元素乘法,dot() -矩阵乘法

matrix:* -矩阵乘法,multiply() -逐元素乘法

处理向量

array:形状为 1xN, Nx1, N 的向量的意义是不同的,类似于 A[:,1] 的操作返回的是一维数组(shape为(N,)),形状为 N,一维数组的转置仍是自己本身

matrix:形状为 1xN, Nx1,A[:,1] 返回的是二维 Nx1 矩阵

高维数组

array:支持大于2的维度

matrix:维度只能为2

属性

array:.T 表示转置

matrix:.H 表示复共轭转置,.I 表示逆,.A 表示转化为 array 类型

构造函数

array:array 函数接受一个(嵌套)序列作为参数——array([[1,2,3],[4,5,6]])

matrix:matrix 函数额外支持字符串参数——matrix("[1 2 3; 4 5 6]")

其优缺点各自如下:

array

[GOOD] 一维数组既可以看成列向量,也可以看成行向量。v 在 dot(A,v) 被看成列向量,在 dot(v,A) 中被看成行向量,这样省去了转置的麻烦

[BAD!] 矩阵乘法需要使用 dot() 函数,如: dot(dot(A,B),C) vs A*B*C

[GOOD] 逐元素乘法很简单: A*B

[GOOD] 作为基本类型,是很多基于 numpy 的第三方库函数的返回类型

[GOOD] 所有的操作 *,/,+,**,... 都是逐元素的

[GOOD] 可以处理任意维度的数据

[GOOD] 张量运算

matrix

[GOOD] 类似与 MATLAB 的操作

[BAD!] 最高维度为2

[BAD!] 最低维度也为2

[BAD!] 很多函数返回的是 array,即使传入的参数是 matrix

[GOOD] A*B 是矩阵乘法

[BAD!] 逐元素乘法需要调用multiply 函数

[BAD!] / 是逐元素操作

当然在实际使用中,二者的使用取决于具体情况。

二者可以互相转化:

asarray :返回数组

asmatrix(或者mat) :返回矩阵

asanyarray :返回数组或者数组的子类,注意到矩阵是数组的一个子类,所以输入是矩阵的时候返回的也是矩阵

3. 类Matlab函数:ones, zeros, empty, eye, rand, repmat

注:通常这些函数返回值为array;为了得到matrix返回值,可使用matlib子模块

1 importnumpy2 importnumpy.matlib3

4 a = numpy.ones(7)5 print(a.shape)  #(7,)6 print(type(a))  #7

8 a = numpy.matlib.ones(7)9 print(a.shape)  #(1,7)10 print(type(a))  #

mat函数将数组转化为矩阵:a = numpy.array([1,2,3]);b = numpy.mat(a)

类似于利用matlib模块生成矩阵,还有部分函数也被放到子模块中了,如调用rand()函数需要使用numpy.random.rand()  // a = numpy.random.rand(10)

4. 等效操作

1 from numpy import *

2 import scipy.linalg

#以下linalg代表numpy.linalg,与scipy.linalg不同

MATLAB 与 Numpy 下标之间有这样几处不同:

1-base vs 0-base

() vs []

MATLAB:beg(:step):end,包含结束值 end

Numpy:beg:end(:step),不包含结束值 end

1582056-20190119145234482-803133550.jpg

1582056-20190119144549984-1033733704.jpg

1582056-20190119144636126-771891970.jpg

1582056-20190119144711928-1326027514.jpg

1582056-20190119144756312-1993498225.jpg

1582056-20190119144821966-390884311.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值