1. 程式人生 > >numpy使用技巧之陣列過濾

numpy使用技巧之陣列過濾

當使用布林陣列b作為下標存取陣列x中的元素時,將收集陣列x中所有在陣列b中對應下標為True的元素。使用布林陣列作為下標獲得的陣列不和原始陣列共享資料空間,注意這種方式只對應於布林陣列(array),不能使用布林列表(list)
參考自:這裡

>>> x = np.arange(5,0,-1)
>>> x
array([5, 4, 3, 2, 1])
>>> x[np.array([True, False, True, False, False])]
>>> # 下標為True的取出來,布林陣列中下標為0,2的元素為True,因此獲取x中下標為0,2的元素
array([5, 3]) >>> x[[True, False, True, False, False]]#Error,這不是我們想要的結果 >>> # 如果是布林列表,則把True當作1, False當作0,按照整數序列方式獲取x中的元素 array([4, 5, 4, 5, 5]) >>> x[np.array([True, False, True, True])] >>> # 布林陣列的長度不夠時,不夠的部分都當作False array([5, 3, 2]) >>> x[np.array([True
, False, True, True])] = -1, -2, -3#只修改下標為True的元素 >>> # 布林陣列下標也可以用來修改元素 >>> x array([-1, 4, -2, -3, 1])

注意:布林陣列一般不是手工產生的,通常我們使用一條布林表示式來得到,如:

>>> x = np.random.rand(10) # 產生一個長度為10,元素值為0-1的隨機數的陣列
>>> x
array([ 0.72223939,  0.921226  ,  0.7770805 ,  0.2055047 ,  0.17567449
, 0.95799412, 0.12015178, 0.7627083 , 0.43260184, 0.91379859]) >>> x>0.5 >>> # 陣列x中的每個元素和0.5進行大小比較,得到一個布林陣列,True表示x中對應的值大於0.5 array([ True, True, True, False, False, True, False, True, False, True], dtype=bool) >>> x[x>0.5]# x>0.5是一個布林陣列 >>> # 使用x>0.5返回的布林陣列收集x中的元素,因此得到的結果是x中所有大於0.5的元素的陣列 array([ 0.72223939, 0.921226 , 0.7770805 , 0.95799412, 0.7627083 , 0.91379859])