Python中,NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
使用前需導入numpy模塊
1. 創建矩陣
1 # 導入模塊 2 import numpy as np 3 4 # 創建一維array對象 5 a1 = np.array([1, 3, 2]) 6 # 創建一個2 x 3 矩陣 , 輸入參數實際為列表或元組,列表或元組內部元素為單個數值 7 8 # 創建二維array對象 9 a1 = np.array([1, 3, 2], [4, 3, 6]) 10 # 創建一個2 x 3 矩陣 , 輸入參數實際為列表或元組,列表或元組內部元素又是列表或元組數值
2. 矩陣元素獲取
1 import numpy as np 2 3 a1 = np.array([1, 3, 2]) 4 a2 = np.array([[1, 3, 2], [4, 3, 6]]) 5 6 # 獲取矩陣的行數和列數 7 size = a1.shape() # 返回元組(1, 0) 8 9 # 獲取一維矩陣的第三個元素 10 b1 = a1[2] 11 12 13 # 獲取二維矩陣的第二行 14 b2 = a2[1] 或 b2 = a2[1, ] 或 b2 = a2[1, :] 15 16 # 獲取二維矩陣的第二列 17 b3 = a2[:, 1] # 注:返回值為行向量形式 18 19 # 獲取二維矩陣的第1,2行的第3,4兩列 20 b4 = a2[0:2, 2:4] 21 22 23 # 獲取二維矩陣的第二行第三個元素 24 b3 = a2[1, 2]
3. 按條件截取
按條件截取其實是在[](方括號)中傳入自身的布爾語句.
1 import numpy as np 2 3 a3 = np.array([[1, 3, 2], [4, 3, 6], [7,5,3]]) 4 5 6 c1 = a3 > 2 7 print(c1) 8 9 # 返回布爾值矩陣 10 [[False True False] 11 [ True True True] 12 [ True True True]] 13 14 15 16 c2 = a3[a3 > 2] 17 print(c2) 18 19 # 返回滿足條件的一維列表 20 [3 4 3 6 7 5 3]
4. 矩陣合並
1 import numpy as np 2 3 a1 = np.array([[7, 5, 2], [4, 2, 5]]) 4 a2 = np.array([[1, 3, 2], [4, 3, 6]]) 5 6 # 按行合並 7 h = np.hstack([a1, a2]) 或 h = np.hstack((a1, a2)) 8 print(h) 9 # 返回 10 [[7 5 2 1 3 2] 11 [4 2 5 4 3 6]] 12 13 # 按列合並 14 v = np.vstack([a1, a2]) 或 h = np.vstack((a1, a2)) 15 print(v) 16 # 返回 17 [[7 5 2] 18 [4 2 5] 19 [1 3 2] 20 [4 3 6]] 21 22 23 # 矩陣合並也可用concatenate方法 24 np.concatenate( (a1,a2), axis=0 ) 等價於 np.vstack( (a1,a2) ) 25 np.concatenate( (a1,a2), axis=1 ) 等價於 np.hstack( (a1,a2) )
5. 通過函數常見矩陣
1 import numpy as np 2 3 # 通過linspace方法創建等差數列,首位為2,末位為10,包含5個元素的等差數列 4 a1 = np.linspace(2, 10, 5) # 返回[ 2. 4. 6. 8. 10.] 5 6 # 通過logspace方法創建等比數列,首位為10^2, 末位為10^5, 包含4個元素的等比數列 7 a2 = np.logspace(2, 5, 4) # 返回[ 100. 1000. 10000. 100000.] 8 9 # 通過ones方法創建全1矩陣 10 a3 = np.ones(3,4) # 創建3*4的全 1 矩陣 11 12 # 通過zeros方法創建全0矩陣 13 a3 = np.zeros(3,4) # 創建3*4的全 0 矩陣 14 15 # 通過eye方法創建單位矩陣 16 a3 = np.eye(3,4) # 創建3*4的單位矩陣 17 18 # 通過fromstring方法將字符串轉換成array對象,可以將字符批量轉換成ASCII碼 19 a = "abcdef" 20 b = np.fromstring(a,dtype=np.int8) # 因為一個字符為8為,所以指定dtype為np.int8 21 print(b) # 返回 [ 97 98 99 100 101 102] 22 23 # 通過fromfunction方法根據行號和列號生成矩陣 24 def f1(i,j): 25 return i+j 26 a = np.fromfunction(func,(5,6)) 27 # 第一個參數為指定函數,第二個參數為列表list或元組tuple,說明矩陣的大小 28 print(a) 29 # 返回 30 [[ 0. 1. 2. 3. 4. 5.] 31 [ 1. 2. 3. 4. 5. 6.] 32 [ 2. 3. 4. 5. 6. 7.] 33 [ 3. 4. 5. 6. 7. 8.] 34 [ 4. 5. 6. 7. 8. 9.]]
6. 矩陣運算
對每個元素的運算
矩陣函數 | 說明 |
np.sin(a) | 對矩陣a中的每個元素取正弦, sin(x) |
np.cos(a) | 對矩陣a中的每個元素取余弦, cos(x) |
np.tan(a) | 對矩陣a中的每個元素取正切, tan(x) |
np.arcsin(a) | 對矩陣a中的每個元素取反正弦, arsin(x) |
np.arccos(a) | 對矩陣a中的每個元素取反余弦, arcos(x) |
np.arctan(a) | 對矩陣a中的每個元素取反正切, artan(x) |
np.sqrt(a) | 對矩陣a中的每個元素開方, sqrt(x) |