参考资料:python
https://github.com/lijin-THU/notes-python(相应实体书为:《自学Python——编程基础、科学计算及数据分析》)git
从Matlab到Numpygithub
1. Numpy和Matlab比较编程
2. array仍是matrix?(数组 VS 矩阵)数组
Numpy
中不只提供了 array
这个基本类型,还提供了支持矩阵操做的类 matrix
,可是通常推荐使用数组array:dom
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
:维度只能为2array
:.T
表示转置matrix
:.H
表示复共轭转置,.I
表示逆,.A
表示转化为 array
类型array
:array
函数接受一个(嵌套)序列做为参数——array([[1,2,3],[4,5,6]])
matrix
:matrix
函数额外支持字符串参数——matrix("[1 2 3; 4 5 6]")
其优缺点各自以下:spa
array
3d
[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
code
[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 import numpy 2 import numpy.matlib 3 4 a = numpy.ones(7) 5 print(a.shape) #(7,) 6 print(type(a)) #<class 'numpy.ndarray'> 7 8 a = numpy.matlib.ones(7) 9 print(a.shape) #(1,7) 10 print(type(a)) #<class 'numpy.matrixlib.defmatrix.matrix'>
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