
Python中沒有提供陣列功能,雖然串列可以完成基本的陣列功能,但并不是真正的陣列,而且在資料量較大時,使用串列的速度回非常慢,因此,Numpy提供了真正的陣列功能,以及對資料進行快速處理的函式,Numpy內置函式處理資料的速度是C語言級別的,因此,盡量使用其內置函式,
Numpy安裝
Numpy安裝和普通的第三方庫安裝一樣,最常用的就是利用 pip 安裝:
pip install numpy
如果你想做資料分析的話,還是建議安裝 anaconda(Windows、macOS、Linux均可使用) ,它是一個集成環境,包含了conda、Python在內的超過180個科學包及其依賴項,幾乎所有你用到的庫都已經幫你安裝好了,同時如果需要其他的第三方庫要安裝,可以使用其中的 conda 便捷的安裝相應庫以及依賴,
Numpy基本操作
基本屬性
numpy包含很多自己的屬性和方法,下面通過一個栗子說明一下幾個它自身的重要屬性,

創建陣列
import numpy as np data = np.array([[1, 2, 3], [4, 5, 6]]) # 創建二維陣列
上面是最基本的創建陣列方法,但是對于實際應用中,它內置的一些函式更為實用,例如:

下面舉例展示一下其中部分用法:

基本操作
Numpy的一個顯著特點就是它的矢量化,使得對其操作是面向整個陣列而不是各個元素,這就省去了很多開銷,具體實作交給更加高效的C來做,矢量化對每個元素執行相同的操作,例如常見的加減乘除等,

特殊的,numpy中的“*”是數乘(按元素運算),矩陣乘法用dot函式來表示,表示為 c.dot(d),
numpy還有很多常用的內置方法,例如求和等,
import numpy as np np.random.random((2, 3)) # 創建一個元素值為0-1之間的亂數的 2*3 的矩陣 data = https://www.cnblogs.com/yudanqu/p/np.array([2, 3, 4, 6, 1, 7, 9]) data.sum() # 求陣列所有元素的和 data.max() # 求陣列中最大值 data.min() # 求陣列中最小值 # 除此之外還包括下面這些常用函式 # prod 積 mean 平均數 std 標準差 var 方差 argin 最小值索引 argmax 最大值索引 median 中位數 any 至少一個為真 all 所有元素為真
上述操作的物件為一維陣列,那么對于二維或者多維陣列來說,也有一些常用的操作,多維陣列可以通過手動創建(np.array),或者通過內置函式設定陣列結果(np.zeros等),除此之外還有一個特殊的方法,就是利用 reshape 修改陣列的結構,上述的求和,求極值等方法在多維陣列中也可以通過設定 axis 引數來靈活操作,axis表示多維陣列中的軸,

說到 reshape ,那就集中說一下陣列的變形,
data.reshape((x, y)) # 將原陣列變為x行y列 data.resize((x, y)) # resize與reshape不同之處在于,resize改變陣列本身 data.ravel() # 將多維陣列展平為一維 data.T # 將陣列轉
陣列的索引切片,至于索引切片操作,其實是和python中的串列一致的,不贅述,
data[x:y:z] # 表示從下標 x 到 y-1 中按步長 z 取元素
廣播也是numpy中常用的知識,
廣播(Broadcasting)規則
廣播允許通用功能以有意義的方式處理不具有完全相同形狀的輸入,
廣播的第一個規則是,如果所有輸入陣列不具有相同數量的維度,則將“1”重復地預先添加到較小陣列的形狀,直到所有陣列具有相同數量的維度,
廣播的第二個規則確保沿特定維度的大小為1的陣串列現為具有沿該維度具有最大形狀的陣列的大小,假定陣列元素的值沿著“廣播”陣列的那個維度是相同的,
--引自Numpy中文網(https://www.numpy.org.cn/)
也許比較抽象,畫圖說明一下,

圖中A為2*3的矩陣,B是一維的,若要相加必須調整為相同結構,根據第一條規則,在左側再添加維度得B(1,3),根據規則二,將對應維度上的元素為一的補齊,則完全復制一份B拼接在下面,形成維度相同的兩個矩陣再進行相加運算,若將所有大小為1的維度補齊后,兩陣列仍維度不同,那么不能進行計算,給個例子大家可以琢磨一下:A(2,5),B(3),最終column分別為5和3,則維度不同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180703.html
標籤:Python
