1. 程式人生 > >numpy中陣列的布林型索引

numpy中陣列的布林型索引

布林型索引是我在接觸numpy的時候給了我很大興奮感的一個功能,做一下簡單的拓展,他能夠很方便地應用到我現在需要的一些處理中。
做一下簡單的示範:
In [15]: languages = np.array(['c','perl','python','c','python','perl','java'])


In [16]: data = np.random.randn(7,5)


In [17]: languages == 'java'
Out[17]: array([False, False, False, False, False, False,  True], dtype=bool)


In [18]: la
lambda    languages %%latex


In [18]: languages
Out[18]:
array(['c', 'perl', 'python', 'c', 'python', 'perl', 'java'],
      dtype='|S6')


In [19]: data
Out[19]:
array([[ 0.53269771, -0.96777826,  0.16436322, -0.66330618, -1.51764433],
       [-0.21901685, -1.40160172, -1.53372728,  1.34650319,  0.15598243],
       [-0.69165371, -2.54222671, -3.21942188, -0.79798456, -0.27872961],
       [-0.5463104 ,  0.05802836,  0.31547985, -0.72454312,  1.78765555],
       [-0.75535754,  0.31312654,  0.8220388 ,  0.70390257,  1.01196357],
       [ 1.21271695, -0.22248861, -0.10805819,  1.35481495,  0.48239976],
       [ 0.49911817,  0.44448865, -0.07650099,  0.52474671, -0.5468977 ]])


In [20]: languages.shape
Out[20]: (7L,)


In [21]: data.shape
Out[21]: (7L, 5L)


In [22]: data[languages == 'python']
Out[22]:
array([[-0.69165371, -2.54222671, -3.21942188, -0.79798456, -0.27872961],
       [-0.75535754,  0.31312654,  0.8220388 ,  0.70390257,  1.01196357]])
從上面的互動資訊看來,languages是一個7行1列的向量,而資料是一個7行5列的向量。布林索引實現的是通過列向量中的每個元素的布林量數值對一個與列向量有著同樣行數的矩陣進行符合匹配。而這樣的作用,其實是把列向量中布林量為True的相應行向量給抽取了出來。
如果進行變數或者標定量的大資料處理,這種篩選功能的使用肯定會給程式的設計帶來極大的便捷。