教程|Python之Numpy ndarray 基本介紹 4
教程|Python之Numpy ndarray 基本介紹 3
知識點10. 布林型索引
來看這樣一個例子,假設我們有一個用於儲存資料的陣列以及一個儲存姓名的陣列(含有重複項)。在這裡,我將使用numpy.random中的randn函式生成一些正態分佈的隨機資料:
假設每個名字都對應data陣列中的一行,而我們想要選出對應於名字"Bob"的所有行。跟算術運算一樣,陣列的比較運算(如==)也是向量化的。因此,對names和字串"Bob"的比較運算將會產生一個布林型陣列:
這個布林型陣列可用於陣列索引:
注意:如果布林型陣列的長度不對,布林型選擇就會出錯,因此一定要小心。
布林型陣列的長度必須跟被索引的軸長度一致。此外,還可以將布林型陣列跟切片、整數混合使用:
下面的例子,我選取了names == 'Bob'的行,並索引了列:
要選擇除"Bob"以外的其他值,既可以使用不等於符號(!=),也可以通過~對條件進行否定:
~操作符用來反轉條件很好用:
選取這三個名字中的兩個需要組合應用多個布林條件,使用&(和)、|(或)之類的布林算術運算子即可:
通過布林型索引選取陣列中的資料,將總是建立資料的副本,即使返回一模一樣的陣列也是如此。
注意:Python關鍵字and和or在布林型陣列中無效。要使用&與|。
通過布林型陣列設定值是一種經常用到的手段。為了將data中的所有負值都設定為0,我們只需:
通過一維布林陣列設定整行或列的值也很簡單:
知識點11. 花式索引
花式索引(Fancy indexing)是一個NumPy術語,它指的是利用整數陣列進行索引。假設我們有一個8×4陣列:
為了以特定順序選取行子集,只需傳入一個用於指定順序的整數列表或ndarray即可:
這段程式碼確實達到我們的要求了!使用負數索引將會從末尾開始選取行
一次傳入多個索引陣列會有一點特別。它返回的是一個一維陣列,其中的元素對應各個索引元組:
這個花式索引的行為可能會跟某些使用者的預期不一樣(包括我在內),選取矩陣的行列子集應該是矩形區域的形式才對。下面是得到該結果的一個辦法:
記住,花式索引跟切片不一樣,它總是將資料複製到新陣列中。
知識點12. 陣列轉制和軸對換
轉置是重塑的一種特殊形式,它返回的是源資料的檢視(不會進行任何複製操作)。陣列不僅有transpose方法,還有一個特殊的T屬性:
在進行矩陣計算時,經常需要用到該操作,比如利用np.dot計算矩陣內積:
對於高維陣列,transpose需要得到一個由軸編號組成的元組才能對這些軸進行轉置(比較費腦子):
簡單的轉置可以使用.T,它其實就是進行軸對換而已。ndarray還有一個swapaxes方法,它需要接受一對軸編號:
swapaxes也是返回源資料的檢視(不會進行任何複製操作)
教程|Jupyter Notebook初級教程——迷死人的基礎操作
教程|Jupyter Notebook基礎教程——快捷鍵的使用
教程|Python之Numpy ndarray 基本介紹 1
教程|Python之Numpy ndarray 基本介紹 2
教程|Python之Numpy ndarray 基本介紹 3
點選 瞭解更多 ,動手操作
— End —