壹言以蔽之,numpy是python中基於數組對象的科學計算庫。
提煉關鍵字,可以得出numpy以下三大特點:
因為numpy是壹個python庫,所以使用python包管理工具pip或者conda都可以安裝。
安裝python後,打開cmd命令行,輸入:
即可完成安裝。
n維數組(ndarray)對象,是壹系列 同類數據 的集合,可以進行索引、切片、叠代操作。
numpy中可以使用 array 函數創建數組:
判斷壹個數組是幾維,主要是看它有幾個軸(axis)。
壹個軸表示壹維數組,兩個軸表示二維數組,以此類推。
每個軸都代表壹個壹維數組。
比如說,二維數組第壹個軸裏的每個元素都是壹個壹維數組,也就是第二個軸。
壹維數組壹個軸:
二維數組兩個軸:
三維數組三個軸:
以此類推n維數組。
numpy中常用 array 函數創建數組,傳入列表或元組即可。
創建壹維數組,並指定數組類型為 int :
創建二維數組:
還可以使用 arange 函數創建壹維數字數組,用法類似python的 range 函數.
numpy的 random 模塊用來創建隨機數組。
random模塊還有其他函數,這裏不多說。
前面說到,數組維度即代表軸的數量。
我們可以通過數組(adarray)對象的ndim或shape屬性,來查看軸的數量。
數組(ndarray)對象的 size 屬性可以查看數組包含元素總數。
還可以通過 shape 屬性返回元素的乘積,來計算數組元素數量。
Numpy支持的數據類型非常多,所以很適合做數值計算。
下面給出常見的數據類型:
數組(adarrry)對象提供 dtype 屬性,用來查看數組類型。
前面說過,數組的 shape 屬性返回壹個元組,能夠反映數組的形狀,包括維度以及每個軸的元素數量。
那麽如果給定壹個數組,怎麽改變其形狀呢?
常用的方式有兩種:
比如說我要將壹個二維數組轉換為三維數組。
reshape 方法可以傳入整數或者元組形式的參數。
傳入的參數和 shape 屬性返回的元組的含義是壹樣的。
例如, x2.reshape(1,2,3) 是將二維數組轉換成三維數組,參數個數代表要轉換的維度,參數數字從左到右分別表示0軸、1軸、2軸的元素數量。
resize 方法和 reshape 方法使用形式壹樣,區別是 resize 方法改變了原始數組形狀。
numpy壹維數組的索引和切片操作類似python列表,這裏不多講。
比如說取壹維數組前三個元素。
重點是對多維數組的索引和切片。
多維數組有多個軸,那麽就需要對每個軸進行索引。
例如,三維數組形狀為(x,y,z),分別代表:0軸有x個元素、1軸有y個元素,2軸有z個元素。
對0、1、2軸進行索引,如果取o軸第2個元素、1軸第0個元素、2軸第3個元素,那麽索引形式就為[2,0,3]。
切片也是同樣道理。
如果取o軸前2個元素、1軸前1個元素、2軸後2個元素,那麽切片形式就為[:2,:1,-2:]。
說到叠代,大家很容易想到直接對數組直接使用 for 循環操作,對於壹維數組來說,當然是可以的。
但對於多維數組,叠代是相對於0軸完成的,就是多維數組最外層的那壹維。
妳沒有辦法直接遍歷數組裏每壹個元素,嵌套循環又太低效。
這個時候就需要用到 flat 方法,它可以將多維數組平鋪為壹維的叠代器。
數組(ndarray)對象提供了ravel方法,用來將多維數組展開為壹維數組。
廣播(Broadcast)是 numpy 對不同形狀(shape)的數組進行數值計算的方式, 對多個數組的算術運算通常在相應的元素上進行。
較小的數組在較大的數組上“廣播”,以便它們具有兼容的形狀。
比如說壹個壹維數組乘以壹個數字,相當於壹維數組裏每個元素都乘以這個數。
如果相同維度的數組進行運算,其shape相同,那麽廣播就是兩個數組相同位數的元素進行運算。
如果兩個數組維度不同,進行運算,這裏就觸發了廣播的兩個規則。
這兩個規則保證了不同維度數組進行運算時,其維度自動調整成壹致。
numpy提供了 transpose 函數用以對數組進行維度的調換,也就是轉置操作。
轉置後返回壹個新數組。
當然,可以用更簡單的方法。
數組對象提供了 T 方法,用於轉置,同樣會返回壹個新數組。
numpy的 concatenate 函數用於沿指定軸連接相同形狀的兩個或多個數組。
numpy的 unique 函數用於去除數組中的重復元素,返回壹個新數組。
unique 函數還能返回重復元素的索引、計數等信息,可去查文檔自定義參數。
numpy文檔
菜鳥教程