1. 引言
最近在將一個算法由matlab轉成python,初學python,很多地方還不熟悉,總體感覺就是上手容易,實際上很優雅地用python還是蠻難的。目前為止,覺得就算法仿真研究而言,還是matlab用得特別舒服,可能是比較熟悉的緣故吧。matlab直接集成了很多算法工具箱,函數查詢、調用、變量查詢等非常方便,或許以后用久了python也會感覺很好用。與python相比,最喜歡的莫過于可以直接選中某段代碼執行了,操作方便,python也可以實現,就是感覺不是很方便。
言歸正傳,做算法要用到很多的向量和矩陣運算操作,這些嘛在matlab里面已經很熟悉了,但用python的時候需要用一個查一個,挺煩的,所以在此稍作總結,后續使用過程中會根據使用體驗更新。
python的矩陣運算主要依賴numpy包,scipy包以numpy為基礎,大大擴展了后者的運算能力。
2. 創建一般的多維數組
import numpy as npa = np.array([1,2,3], dtype=int) # 創建1*3維數組 array([1,2,3])type(a) # numpy.ndarray類型a.shape # 維數信息(3L,)a.dtype.name # 'int32'a.size # 元素個數:3a.itemsize #每個元素所占用的字節數目:4b=np.array([[1,2,3],[4,5,6]],dtype=int) # 創建2*3維數組 array([[1,2,3],[4,5,6]])b.shape # 維數信息(2L,3L)b.size # 元素個數:6b.itemsize # 每個元素所占用的字節數目:4c=np.array([[1,2,3],[4,5,6]],dtype='int16') # 創建2*3維數組 array([[1,2,3],[4,5,6]],dtype=int16)c.shape # 維數信息(2L,3L)c.size # 元素個數:6c.itemsize # 每個元素所占用的字節數目:2c.ndim # 維數 d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 復數二維數組d.itemsize # 每個元素所占用的字節數目:16d.dtype.name # 元素類型:'complex128'
3. 創建特殊類型的多維數組
a1 = np.zeros((3,4)) # 創建3*4全零二維數組輸出:array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])a1.dtype.name # 元素類型:'float64'a1.size # 元素個數:12a1.itemsize # 每個元素所占用的字節個數:8 a2 = np.ones((2,3,4), dtype=np.int16) # 創建2*3*4全1三維數組a2 = np.ones((2,3,4), dtype='int16') # 創建2*3*4全1三維數組輸出:array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]], dtype=int16) a3 = np.empty((2,3)) # 創建2*3的未初始化二維數組輸出:(may vary)array([[ 1., 2., 3.], [ 4., 5., 6.]])a4 = np.arange(10,30,5) # 初始值10,結束值:30(不包含),步長:5輸出:array([10, 15, 20, 25])a5 = np.arange(0,2,0.3) # 初始值0,結束值:2(不包含),步長:0.2輸出:array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])from numpy import pinp.linspace(0, 2, 9) # 初始值0,結束值:2(包含),元素個數:9輸出:array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])x = np.linspace(0, 2*pi, 9)輸出:array([ 0. , 0.78539816, 1.57079633, 2.35619449, 3.14159265, 3.92699082, 4.71238898, 5.49778714, 6.28318531])a = np.arange(6)輸出:array([0, 1, 2, 3, 4, 5])b = np.arange(12).reshape(4,3)輸出:array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])c = np.arange(24).reshape(2,3,4)輸出:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])
新聞熱點
疑難解答