布爾型索引是我在接觸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的相應行向量給抽取了出來。
如果進行變量或者标定量的大資料處理,這種篩選功能的使用肯定會給程式的設計帶來極大的便捷。