參考資料: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