numpy學習彙總4-花式索引tcy
阿新 • • 發佈:2019-02-12
1.7.花式索引 2018/11/11 ================================================================== 1.說明 # 1)NumPy陣列可用切片進行索引 # 2)可用布林或整數陣列(掩碼)進行索引.這種方法稱為花式索引. # .3)花式索引跟切片不一樣,它建立副本而不是檢視。 用法: a[ [bool or int]] ================================================================== # 1.1.使用布林掩碼 np.random.seed(3) np.random.randint(0, 10, 8) # array([8, 9, 3, 8, 8, 0, 5, 3]) mask = (a % 2 == 0) # array([True, False, False,True,True,True,False,False]) b= a[mask] # 等價a[a%2==0] b # array([8, 8, 8, 0]) #1.2.為子陣列分配新值: a[a % 2 == 0] = -1 a # array([-1, 9, 3, -1, -1, -1, 5, 3]) =================================================================== # 2.1.使用整數陣列進行索引 a = np.arange(0, 100, 10) a # array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90]) a[[2, 3, 2, 4, 2]] # note: [2, 3, 2, 4, 2] is a Python list # array([20, 30, 20, 40, 20]) # 用整數陣列進行索引來建立新陣列,新陣列形狀與整數陣列形狀相同: ---------------------------------------------- a = np.arange(10) idx = np.array([[3, 4], [9, 7]]) idx.shape # (2, 2) a[idx] #array([[3, 4],[9, 7]]) ---------------------------------------------- # 一次傳入多個索引陣列: arr= np.arange(32).reshape((8, 4)) arr #array( [[ 0, 1, 2, 3], [ 4, 5, 6, 7],[ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19],[20, 21, 22, 23], [24, 25, 26, 27],[28, 29, 30, 31]]) arr[[1, 5, 7, 2], [0, 3, 1, 2]]#array([ 4, 23, 29, 10])終選元素(1,0),(5,3),(7,1),(2,2) ----------------------------------------------- # ix_函式將兩個一維陣列轉換為一個用於選取方形區域的索引器: arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])] arr[[1, 5, 7, 2]][:,[0, 3, 1, 2]] # 等價於上面 # array( [[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]]) ------------------------------------------------ # 2.2.可以使用此類索引分配新值: a[[9, 7]] = -100 a # array([0,10,20,30,40,50,60,-100,80,-100]) =====================================================================