NumPy是大部分Python熱門程式庫的底層, 有龐大的生態體系, 是學習其它套件的入門磚, 學習NumPy的關鍵在於它的矩陣處理, 不同套件之間透過轉換處理之後即可輕鬆整合, 這裡記錄常用語法方便查詢用 |
import numpy as np a = np.array([1,2,3]) a + a #array([2, 4, 6]) def print_array_detail(a): print 'Dimensions: %d, shape: %s, dtype: %s'\ %(a.ndim, a.shape, a.dtype) print_array_detail(a) #Dimensions: 1, shape:(3, ), dtype:int64 a = a.reshape([3, 1]) a #array([[1], # [2], # [3]]) #reshape中的-1,會自動幫我們計算該維度的大小應該是多少 #舉一個1*2*3的矩陣a,reshape成b, c, d矩陣,給大家參考 a = np.arange(6).reshape(1, 2, 3) # 6個值放在1*2*3的陣列中 #總共只有6個值,我要把它放在2維陣列,且第二維長度要為6,-1會幫我們算出第1維應該要是多少。("1",6) b = a.reshape(-1, 6) #總共只有6個值,我要把它放在2維陣列,且第一維長度要為3, #-1放在第2維會幫我們算出第2維應該要是多少。(3,"2") c = a.reshape(3, -1) d = a.reshape(1, 1, -1) #6個值放在(1, 1, ?)的陣列中,?會是"6" print(f"a的shape: {a.shape}") #a的shape: (1, 2, 3) print(f"b的shape: {b.shape}") #b的shape: (1, 6) print(f"c的shape: {c.shape}") #c的shape: (3, 2) print(f"d的shape: {d.shape}") #d的shape: (1, 1, 6) a = np.array([[1,2,3,4],[5,6,7,8]], np.int32) a.shape #(2,4) a.shape = (8,)##攤平 a #array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int32) a = a.reshape([2,2,2])##變成3維 #array([[1,2], # [3,4]], # [[5,6], # [7,8]]], dtype=int32) print_array_detail(a) #Dimensions: 3, shape:(2,2,2), dtype:int64
建立陣列
np.zeros([2,3]) #array([[0., 0., 0.], # [0., 0., 0.]]) np.ones([2,3]) #array([[1., 1., 1.], # [1., 1., 1.]]) np.empty((2,3))##存放記憶體位置 #array([[4.94e-323, 9.88e-323, 1.48e-322], #[1.98e-322, 2.47e-322, 2.96e-322]]) np.random.random((2,3)) #array([[0.70320172, 0.80210734, 0.21202405], # [0.60888451, 0.40580769, 0.77243115]]) np.linspace(2,10,5)##2~10中間切5份 #array([ 2., 4., 6., 8., 10.]) np.arange(2,10,2) #array([2, 4, 6, 8]) np.full((2,2), 5) #array([[5, 5], # [5, 5]]) np.eye(3) #array([[1, 0, 0], # [0, 1, 0] # [0, 0, 1]]) #建立矩陣 np.array([1, 2, 3], [2, 4, 5]) #array([[1, 2, 3], # [2, 4, 5]])
基本操作
a = np.array([1,2,3,4,5,6]) a[3], a[3:5], a[:4:2], a[::-1]##反轉 #(4, array([4, 5]), array([1, 3]), array([6, 5, 4, 3, 2, 1])) a = np.array([10,20,30,40,50,60]) a > 50 #array([False, False, False, False, False, True]) a = np.arange(8).reshape((2,4)) a #array([[0, 1, 2, 3], # [4, 5, 6, 7]]) a.min(axis=1), a.sum(axis=0), a.mean(axis=1), a.std(axis=1)##敘述統計 #(array([0, 4]), # array([ 4, 6, 8, 10]), # array([1.5, 5.5]), #array([1.11803399, 1.11803399])) np.cumsum(a, axis=1)## #array([[ 0, 1, 3, 6], # [ 4, 9, 15, 22]]) pi = np.pi a = np.array([pi, pi/2, pi/4, pi/6]) a #array([3.14159265, 1.57079633, 0.78539816, 0.52359878]) np.degrees(a) #array([180., 90., 45., 30.]) # 布林遮罩 mask= (a%3 == 0) b = a[mask] #array([3, 6])
函式
##functin def function(a): return a a = np.arange(10) function(a) #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
切割
x = np.arrange(6).reshape(2,3) # [[0,1,2], # [3,4,5]] x[0,0:2] #[0,1] x[:,1:] # [[1,2], # [4,5]] x[::1,::2] # [[0,2], # [3,5]]
陣列廣播
當兩個陣列形狀不同, numpy陣列廣播可以讓較小的陣列擴張成大型陣列Stack
Ref:
- Kryan Dale著,林紀岩譯 , 資料視覺化使用Python與JavaScript , O'REILLY
- 陳允傑著, Python資料科學與人工智慧應用實務 , 旗標
- 台灣人工智慧學校
沒有留言:
張貼留言