數組的索引與切片 多維數組的索引 2. NumPy中的數組的切片 3. 布爾型索引 4. 花式索引 數組轉置與軸對換 1. transpose函數用於數組轉置,對於二維數組來說就是行列互換 2. 數組的T屬性,也是轉置 arr1 = arr.T與arr2=arr.transpose()效果一樣 通用 ...
數組的索引與切片
多維數組的索引
1 import numpy as np 2 arr=np.arange(1,25).reshape(2,3,4) 3 arr 4 # 輸出 array([[[ 1, 2, 3, 4], 5 [ 5, 6, 7, 8], 6 [ 9, 10, 11, 12]], 7 8 [[13, 14, 15, 16], 9 [17, 18, 19, 20], 10 [21, 22, 23, 24]]]) 11 arr[1][2][3] 12 # 輸出24 13 arr[1,2,3] # 與arr[1][2][3]結果一樣 14 # 輸出24 15 16 arr[0,0:2,1:3] 17 # 輸出array([[2, 3], 18 [6, 7]]) 19 arr[0][0:2][1:3] # 與arr[0,0:2,1:3]結果不一樣 20 # 輸出array([[5, 6, 7, 8]]) 21 22 arr[0,1:2,1:3] 23 # 輸出array([[6, 7]]) 24 arr[0][0:2][1][1:3] # 這樣與arr[0,1:2,1:3]結果才能達到一致 25 # 輸出array([6, 7])
2. NumPy中的數組的切片
3. 布爾型索引
1 # 接上一個代碼 2 arr>6 3 # 輸出array([[[False, False, False, False], 4 [False, False, True, True], 5 [ True, True, True, True]], 6 7 [[ True, True, True, True], 8 [ True, True, True, True], 9 [ True, True, True, True]]]) 10 11 arr[arr>6] 12 # 輸出array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
4. 花式索引
1 import numpy as np 2 arr1 = np.arange(32).reshape(8,4) 3 # 輸出 array([[ 0, 1, 2, 3], 4 [ 4, 5, 6, 7], 5 [ 8, 9, 10, 11], 6 [12, 13, 14, 15], 7 [16, 17, 18, 19], 8 [20, 21, 22, 23], 9 [24, 25, 26, 27], 10 [28, 29, 30, 31]]) 11 12 arr1[[0,3,5],[0,3,2]] # 前一個取出行,後一個按位取出對應的列 13 # 輸出 array([ 0, 15, 22]) 14 15 arr1[[0,3,5]] 16 # 輸出 array([[ 0, 1, 2, 3], 17 [12, 13, 14, 15], 18 [20, 21, 22, 23]]) 19 20 arr1[np.ix_([0,3,5],[0,2,1,3])] # [0,2,1,3]可以改變列的位置 21 # 輸出 array([[ 0, 2, 1, 3], 22 [12, 14, 13, 15], 23 [20, 22, 21, 23]]) 24
數組轉置與軸對換
1. transpose函數用於數組轉置,對於二維數組來說就是行列互換
2. 數組的T屬性,也是轉置
arr1 = arr.T與arr2=arr.transpose()效果一樣
通用函數:快速的元素級數組函數
ufunc:一種對ndarray中的數據執行元素級運算的函數,也可以看作是簡單函數(接受一個或多個標量值,並產生一個或多個標量值)的矢量化包裝起
一元ufunc |
說明 |
abs,fabs |
計算整數、浮點數或複數的絕對值。對於非複數值,可以使用更快的fabs |
sqrt |
計算各元素的平方根,相當於arr**0.5 |
square |
計算各元素的平方,相當於arr**2 |
exp |
計算各元素的指數e的x次方 |
log,log10log2 log1p |
分別為自然對數、底數是10的log,底數為2的log,log(1+x) |
sign |
計算各元素的正負號:1正數,0零,-1負數 |
cell |
計算各元素的ceiling值,即大於等於該值的最小整數 |
floor |
計算各元素的floor值,即小於等於該值的最大整數 |
rint |
將各元素值四捨五入到最接近的整數,保留dtype |
modf |
將數組的小數位和整數部分以兩個獨立數組的形式返回 |
isnan |
返回一個表示“哪些值是NaN(不是一個數字)”的布爾類型數組 |
isfinite,isinf |
分別返回一個表示“哪些元素是有窮的(非inf,非NaN)”或“哪些元素是無窮的”的布爾型數組 |
cos,cosh,sin sinh,tan,tanh |
普通型和雙曲型三角函數 |
arccos,arccosh, arcsin,arctan, arctanh |
反三角函數 |
logical_not |
計算各元素not x的真值,相當於~和-arr |
add |
將數組中相同位置對應的元素相加 |
substract |
從第一個數組中減去第二個數組中的元素 |
multiply |
數組元素相乘 |
divide,floor_divive |
除法或者向下圓整除法(丟棄餘數) |
pow |
對第一個數組中的元素A,根據第二個數組中的相應元素B,計算A的B次方 |
maximum,fmax |
元素級別的最大值,fmax會忽略NaN |
minimum,fmin |
元素級別的最小值,fmin會忽略NaN |
mod |
元素級的求模(除法的餘數) |
copysign |
將第二個數組中的值的符號複製給第一個數組中的對應位置的值 |
greater, greater_equal,less less_equal,equal not_equal |
執行元素級別的比較運算,最終產生布爾型數組 |
logical_and, logical_or, logical_xor |
執行元素級別的布爾邏輯運算,相當於中綴運算符&、|、^ |
聚合函數
1. 聚合函數是對一組值(比如一個數組)進行操作,返回一個單一值作為結果的函數。因此求數組所有元素之和、求所有元素的最大最小值以及標準差的函數就是聚合函數
arr.max() arr.min() arr.mean()
arr.std()標準差,相當於np.sqrt(np.power(arr-arr.mean(),2).sum()/arr.size)
2. 聚合函數可以指定對數值的某個軸元素進行操作
arr.mean(axis=0)對每一列取均值 arr.mean(axis=1)對每一行取均值
axis=0時對同一列上的元素進行聚合 axis=1時對同一行上的元素進行聚合
np.where函數
1. np.where函數是三元表達式x if condition else y 的矢量化版本
1 import numpy as np 2 xarr=np.array([1.1,1.2,1.3,1.4,1.5]) 3 yarr=np.array([2.1,2.2,2.3,2.4,2.5]) 4 condition=np.array([True,False,True,True,False]) 5 result=[(x if c else y) for x,y,c in zip(xarr,yarr,condition)] 6 result 7 # 輸出 [1.1, 2.2, 1.3, 1.4, 2.5] 8 result2=np.where(condition,xarr,yarr) 9 result2 10 # 輸出 array([1.1, 2.2, 1.3, 1.4, 2.5])
2. 案例:將數組中所有NaN缺失值替換為0
1 import numpy as np 2 arr=np.array([[1,2,np.NaN,4],[3,4,5,np.NaN]]) 3 arr 4 # 輸出array([[ 1., 2., nan, 4.], 5 [ 3., 4., 5., nan]]) 6 np.isnan(arr) 7 # 輸出array([[False, False, True, False], 8 [False, False, False, True]]) 9 np.where(np.isnan(arr),0,arr) 10 # 輸出array([[1., 2., 0., 4.], 11 [3., 4., 5., 0.]])
np.unique函數
求數組中不重覆的元素
1 import numpy as np 2 pd=np.array(['圖書','數位','小吃','美食','男裝','美食','女裝','小吃']) 3 np.unique(pd) 4 # 輸出 array(['圖書', '女裝', '小吃', '數位', '男裝', '美食'], dtype='<U2')
數組數據文件讀寫
1. 將數組以二進位格式保存到磁碟
1 import numpy as np 2 data = np.array([[1,2,3,4],[2,3,4,5],[6,7,8,9],[2,3,4,6]]) 3 data 4 # 輸出 array([[1, 2, 3, 4], 5 [2, 3, 4, 5], 6 [6, 7, 8, 9], 7 [2, 3, 4, 6]]) 8 np.save('data',data) # 將多維數組存儲到文件,自動添加尾碼.npy (二進位文件) 9 np.load('data.npy') # 讀取文件需要添加對應的尾碼 10 # 輸出 array([[1, 2, 3, 4], 11 [2, 3, 4, 5], 12 [6, 7, 8, 9], 13 [2, 3, 4, 6]])
2. 存取文本文件
1 import numpy as np 2 exp = np.loadtxt('example.csv',delimiter=',') 3 exp 4 # 輸出array([[1., 2., 3., 4.], 5 [2., 4., 5., 7.], 6 [4., 1., 5., 9.]]) 7 8 np.genfromtxt('example.csv',delimiter=',') 9 # 輸出array([[1., 2., 3., 4.], 10 [2., 4., 5., 7.], 11 [4., 1., 5., 9.]]) 12
3. 數據寫入文本文件
1 import numpy as np 2 np.savetxt('arr.csv',exp.reshape((2,6)),delimiter=',',fmt='%.2f') 3 exp2=np.random.random((2,3,4)) 4 # 如果數組為二維以上的數組,則必須轉換為二維數組才能進行存儲,否則一定會出錯 5 np.savetxt('arr1.csv',arr3.reshape((4,6)),delimiter=',')