一、numpy索引
1.1
布爾索引
row_index = (M[:,0] >= 20) & (M[:,0] <= 80)
col_index = M[0,:] >= 5
M[row_index,:][:,col_index]
注意:不能在同一個方括號中對列和行都使用布爾索引。新詞我們必須先在行方向上進行布爾選擇,然後重新打開方括號進行第二次選擇,這一次集中在列方向上選擇
如果需要對數組元素進行全局選擇,可以
mask = (M >= 20) & (M <= 90) & ((M / 10) % 1 >= 0.5)
M[mask]
1.2 花式索引
row_index = [1,1,2,7]
col_index = [0,2,4,8]
M[row_index,col_index] # 選出(1,0)(1,2)(2,4)(7,8)位置的元素
M[row_index,:][:,col_index] # 選出4行4列
注意:花式索引和普通步數切片索引,要牢記
1.3 普通索引
M[2:9:2,:] # 第2至8行的偶數行
M[2:9:2,5:] # 第2至8行的偶數行&第6列以後的數據
M[2:9:2,5::-1] # 第2至8行的偶數行&第6列開始,逆序取值到第一列
注意:切片和索引只是數據的觀測,如果需要爲這些觀測創建新的數據則必須使用.copy()方法將切片數據賦給另一個變量,否則,對原數組的修改都將反映到切片數據上
也就是說,數組切片索引是原始數組的視圖,它與原始數組共享一個數據存儲空間,即數據不會被複制,視圖上的惹和修改會直接反映到原始數組
N = M[2:9:2,5:].copy()
二、numpy的屬性
shape、dtype、ndim、size、T、flat、nbyte
三、numpy函數
np.sort(s,axis=...):返回排序後的數組
np.argsort(s):返回數組排序後的下標(下標爲原未排序的下標)
np.lexsort():根據鍵值的字典序進行排序
s.reshape(1,2,3):維度改變
np.transpose(s):轉置=s.T
四、數組組合、分拆
np.hstack((a,b)):a,b水平組合=np.concatenate((a,b),axis=1),列數增加
np.vstack((a,c)):a,c豎直組合=np.concatenate((a,b),axis=0)類似於新增記錄,行數增加
深度組合、列組合、行組合見阮敬python數據分析基礎
np.hsplit(a,3):結果是列表,列表中第一個元素是分割後第一列的結果,=np.split(a,3,axis=1)
np.vsplit(a,3):結果是列表,列表中第一個元素是分割後第一行的結果,=np.split(a,3,axis=0)
五、ufunc運算
universal function是一種能對數組中每個元素進行操作的函數,使用outer關鍵字指定把函數返回結果存儲在指定數組
5.1 reduce、accumulate、reduceat、outer
np.add(a1,a2)
a1>a2
any(a1>a2)
all(a1>a2)
5.2 自定義ufunc函數
frompyfunc(func,n_in,n_out)