1. 程式人生 > >numpy學習彙總4-花式索引tcy

numpy學習彙總4-花式索引tcy

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])

=====================================================================