numpy模塊: --對numpy數值---矩陣進行科學運算 --數據分析 --tensorflow/pytorch ---張量進行科學運算 kaggle / 天池 /acm import numpy as np gpu -->圖形顯卡0---圖形存儲 --->numpy數組--可變 #---一維 arrl = np.array([1,2,4,6]) #[可迭代] #二維 arr = np.array([[1,2,4],[7,8,9]]) #三維 ---》tensorflow #屬性: T 行位互換 dtype #數組元素的數據類型,numpy數組屬於python ndim 維數 shape 維度大小(元組) astype 類型轉換 切割數組: print(arr[:,:]) #行,列--從零開始,不要最後的 --》有步長 賦值: print(arr[:,:] = 0) --》邏輯取值 --數組合並: np.hstack((arr1,arr2)) 水平 np.vstack((arr1,arr2)) 垂 np.concatenate(((arr1,arr2),axis=0/1))
numpy模塊:python
--是python中一種開源的數值計算擴展庫。能夠用來存儲和處理大型numpy數組。數組
用途:
1.區別於list1列表。提供了數組操做,數組運算,及統計分佈和簡單的數學模型app
2.計算速度快,甚至要優於python內置的簡單運算, 使得其成爲pandas、sklearn等模塊的依賴包。 高級的框架如TensorFlow、PyTorch等,其數組操做也和numpy很是類似。框架
爲何用numpy?dom
list1 =[1,2,3] list2 = [4,5,6] --list1 * list2 lis_res = [] for i in range(len(list1)): lis_res.append(list1[i]*list2[i]) ---時間複雜度: for 循環--》o(n)
建立numpy數組:
---numpy數組即numpy的ndaray對象,建立numpy數組就是把一個列表傳入np.array()方法函數
import numpy as np #建立一維數組: arr = np.array([1,2,3])# []爲可變數據類型 print(arr,type(arr)) #建立二維數組 arr1 = np.array([[1,2,3],[4,5,6]]) #建立三維數組 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
numpy數組的經常使用屬性:spa
T 數組的轉置(行位互換)--》高維 dtype 數組元素的數據類型 size 數組元素的個數 ndim 數組的維數 shape 數組的維度大小(以元組形式) astype 類型轉換 dtype 種類: bool_,int(8,16,32,64), float(16,32,64)
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) print(arr) [[1. 2. 3.] [4. 5. 6.]] print(arr.T) [[1. 4.] [2. 5.] [3. 6.]] print(arr.shape) (2, 3) #二行,三列
numpy數組的行列數:code
print(arr.shape[0]) -->行 print(arr.shape[1]) -->列
切割數組:orm
--numpy數組的切割涉及到行和列的切割,可是二者切割的方式都是從索引0開始,而且取頭不取尾。對象
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) #取全部元素 print(arr[:,:]) #取第一行全部元素 print(arr[:1,:]) print(arr[0, [0, 1, 2, 3]]) #取第一列全部元素 print(arr[:,:1]) #---邏輯取值,返回一個數組, print(arr[arr>5]) --[ 6 7 8 9 10 11 12] numpy數組按運算符取元素的原理,即經過arr > 5生成一個布爾numpy數組 print(arr > 5)
numpy數組元素替換:
--numpy數組也是一個可變類型的數據,即若是對numpy數組進行替換操做,會修改原numpy數組的元素
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) arr1 = arr.copy() arr1[:1,:] = 0 print(arrl) [[ 0 0 0 0] [ 5 6 7 8] [ 9 10 11 12]] arr2 = arr.copy() arr[arr>5] = 0 print(arr2) arr3[:,:] = 0
numpy數組的合併:
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) # 合併兩個numpy數組的行,注意使用hstack()方法合併numpy數組,numpy數組應該有相同的行,其中hstack的h表示horizontal水平的 print(np.hstack(arr1,arr2)) [[ 1 2 7 8] [ 3 4 9 10] [ 5 6 11 12]] # 合併兩個numpy數組,其中axis=1表示合併兩個numpy數組的行 print(np.concatenate((arr1, arr2), axis=1)) # 合併兩個numpy數組的列,注意使用vstack()方法合併numpy數組,numpy數組應該有相同的列,其中vstack的v表示vertical垂直的 print(np.vstack((arr1, arr2))) [[ 1 2] [ 3 4] [ 5 6] [ 7 8] [ 9 10] [11 12]] # 合併兩個numpy數組,其中axis=0表示合併兩個numpy數組的列 print(np.concatenate((arr1, arr2), axis=0))
經過函數建立numpy數組:
array() 將列表轉化爲數組,可選擇顯示指定dtype areange() range的numpy版,支持浮點數 linspace() 相似arange(),第三參數爲數組長度 zero()/ones() 根據指定形狀和dtype建立全0 / 1數組 eye() 建立單位矩陣 empty() 建立一個元素全隨機數 reshape() 重塑形狀
arr = np.array([1,2,3]) print(arr) print(np.arange(10)) -[0 1 2 3 4 5 6 7 8 9] print(np.arange(1,10,2)) --linspace / logspace #構造一個等差數列, print(np.linspace(0,20,5)) --[ 0. 5. 10. 15. 20.] # 構造一個等比數列,從10**0取到10**20,取5個數 print(np.logspace(0,20,5)) --[1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] zeros / ones / eye / empty print(n.zero(3,4)) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] print(np,eye(3)) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 構造一個4*4的隨機numpy數組,裏面的元素是隨機生成的 print(np.empty((4, 4))) [[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]] #reshape--重塑形狀 arr = np.ones([2,2],dtype=int) print(arr.reshape(4,1)) [[1] [1] [1] [1]]
numpy數組運算:
+ 兩個numpy數組對應元素相加 - 兩個numpy數組對應元素相減 * 兩個numpy數組對應元素相乘 / 兩個numpy數組對應元素相除,若是都是整數則取商 % 兩個numpy數組對應元素相除後取餘數 **n 單個numpy數組每一個元素都取n次方,如**2:每一個元素都取平方
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(ar11+arr2) print(arr1**2) [[ 8 10] [12 14] [16 18]]
numpy數組的轉置
---numpy數組的行和列互換
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.transpose) /print(arr.T) [1 4] [2 5] [3 6]]
numpy數組的逆:
--numpy數組行和列相同時,numpy數組纔可逆
arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]]) print(np.linalg.inv(arr))
Numpy數組科學和統計方法:
sum 求和 cumsum 累加求和 mean 求平均數 std 求標準差 var 求方差 min 求最小值 max 求最大值 argmin 求最小值索引 argmax 求最大值索引 sort 排序
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr.max()) # 獲取舉着每一行的最大值 print(arr.max(axis=0)) # 獲取numpy數組最大元素的索引位置 print(arr.argmax(axis=1)) # 獲取numpy數組每一列的平均值 print(arr.mean(axis=0)) # 獲取numpy數組每一列的元素的方差 print(arr.var(axis=0)) # 對numpy數組的每一列求和 print(arr.sum(axis=0)) # 第n個元素爲前n-1個元素累加和 print(arr.cumsum())
numpy.random生成隨機數:
rand(d0,d1,⋯,dn) 產生均勻分佈的隨機數 dn爲第n維數據的維度 randn(d0,d1,⋯,dn) 產生標準正態分佈隨機數 dn爲第n維數據的維度 randint(low[, high, size, dtype]) 產生隨機整數 low:最小值;high:最大值;size:數據個數 random_sample([size]) 在[0,1)內產生隨機數 size爲隨機數的shape,能夠爲元祖或者列表 choice(a[, size]) 從arr中隨機選擇指定數據 arr爲1維數組;size爲數組形狀 uniform(low,high [,size]) 給定形狀產生隨機數組 low爲最小值;high爲最大值,size爲數組形狀 shuffle(a) 與random.shuffle相同 a爲指定數組