簡介
建立ndarray
ndarray的屬性
ndarray中元素的類型轉換
ndarray的數學運算
index和切片
基本使用
index with slice
boolean index
fancy indexing
數組變換
numpy一個非常重要的作用就是可以進行多元數組的操作,多元數組對象也叫做ndarray。我們可以在ndarray的基礎上進行一系列複雜的數學運算。
本文将會介紹一些基本常見的ndarray操作,大家可以在資料分析中使用。
建立ndarray有很多種方法,我們可以使用np.random來随機生成資料:
除了随機建立之外,還可以從list中建立:
從list中建立多元數組:
使用np.zeros建立初始值為0的數組:
建立2維數組:
使用empty建立3維數組:
注意,這裡我們看到empty建立的數組值為0,其實并不是一定的,empty會從記憶體中随機挑選空間來傳回,并不能保證這些空間中沒有值。是以我們在使用empty建立數組之後,在使用之前,還要記得初始化他們。
使用arange建立範圍類的數組:
指定數組中元素的dtype:
可以通過data.shape獲得數組的形狀。
通過ndim擷取維數資訊:
可以通過data.dtype獲得具體的資料類型。
在建立好一個類型的ndarray之後,還可以對其進行轉換:
上面我們使用astype将int64類型的ndarray轉換成了float64類型的。
如果轉換類型的範圍不比對,則會自動進行截斷操作:
注意,這裡是把小數截斷,并沒有向上或者向下取整。
數組可以和常量進行運算,也可以和數組進行運算:
數組之間還可以進行比較,比較的是數組中每個元素的大小:
先看下index和切片的基本使用,index基本上和普通數組的使用方式是一樣的,用來通路數組中某一個元素。
切片要注意的是切片後傳回的數組中的元素是原數組中元素的引用,修改切片的數組會影響到原數組。
slice還可以作為index使用,作為index使用表示的就是一個index範圍值。
作為index表示的slice可以有多種形式。
有頭有尾的,表示index從1開始到6-1結束:
無頭有尾的,表示index從0開始,到尾-1結束:
有頭無尾的,表示從頭開始,到所有的資料結束:
index還可以使用boolean值,表示是否選擇這一個index的資料。
我們先看下怎麼建構一個boolean類型的數組:
上面我們通過比較的方式傳回了一個隻包含true和false的數組。
這個數組可以作為index值來通路數組:
在索引行的時候,還可以索引列:
可以用 <code>~</code>符号來取反:
我們可以通過布爾型數組設定值,在實際的項目中非常有用:
fancy indexing也叫做花式索引,它是指使用一個整數數組來進行索引。
舉個例子,我們先建立一個 8 * 4的數組:
然後使用一個整數數組來索引,那麼将會以指定的順序來選擇行:
還可以使用負值來索引:
花式索引還可以組合來使用:
上面我們建構了一個8 * 4的數組。
然後取他們的第2列的第一個值,第6列的第三個值等等。最後得到一個1維的數組。
我們可以在不同次元的數組之間進行變換,還可以轉換數組的軸。
reshape方法可以将數組轉換成為任意的形狀:
數組還提供了一個t指令,可以将數組的軸進行對調:
對于高維數組,可以使用transpose來進行軸的轉置:
上面的transpose((1, 0, 2)) 怎麼了解呢?
其含義是将x,y軸對調,z軸保持不變。
上面我們通過使用reshape((2, 2, 4))方法建立了一個3維,也就是3個軸的數組。 其shape是 2 * 2 * 4 。
先看下對應關系:
(0,0)-》 [ 0, 1, 2, 3]
(0,1)-》 [ 4, 5, 6, 7]
(1,0)-》 [ 8, 9, 10, 11]
(1,1)-》 [12, 13, 14, 15]
轉換之後:
(0,1)-》 [ 8, 9, 10, 11]
(1,0)-》[ 4, 5, 6, 7]
于是得到了我們上面的的結果。
多元數組的軸轉換可能比較複雜,大家多多了解。
還可以使用 swapaxes 來交換兩個軸,上面的例子可以重寫為:
本文已收錄于 http://www.flydean.com/09-python-numpy-ndarray/ 最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現! 歡迎關注我的公衆号:「程式那些事」,懂技術,更懂你!