天天看點

NumPy之:ndarray多元數組操作

簡介

建立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/ 最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現! 歡迎關注我的公衆号:「程式那些事」,懂技術,更懂你!

繼續閱讀