天天看點

《Python資料科學指南》——2.2 使用NumPy庫

本節書摘來自異步社群《python資料科學指南》一書中的第2章,第2.2節,作者[印度] gopi subramanian ,方延風 劉丹 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

python中,numpy提供了一條高效處理超大數組的途徑。大多數python科學計算庫中都在内部使用numpy處理數組和矩陣操作。在本書中,numpy被廣泛應用,我們在本節介紹它。

我們先寫一系列語句來操作數組和矩陣,學習如何使用numpy。目的是讓您習慣使用numpy數組,它也是本書大多數内容的基礎。

我們先建立一些簡單的矩陣和數組。

現在我們可以寫一個簡單友善的函數來處理numpy對象。

換種方式來建立數組。

現在我們來看如何建立一些特殊的矩陣。

了解了建立數組和矩陣的知識,我們再看一些整形操作。

接着來看一些矩陣的操作。

最後,我們來看一些轉置、複制和網格操作。

我們再看看numpy庫裡的一些随機數生成例程。

我們先從導入numpy庫開始。

來看看用numpy生成數組的多種方式。

一個數組可以基于清單建立,在前面的示例中,我們聲明了一個具有3個元素的清單,然後用np.array()将這個清單轉為了numpy一維數組。如上面代碼的最後一行所示,我們也可以指定資料的類型。

了解完數組,再來看看矩陣。

我們從listoflist裡建立了一個矩陣,同樣地,我們指定了資料的類型。

在繼續之前,我們得先定義display_shape函數,這個函數我們接下來會經常用到。

所有的numpy對象都有以下3個屬性。

size:給定的numpy對象裡的元素個數。

ndim:維數。

shape:傳回一個包含了numpy對象各個維的長度的元組。

除了列印輸出原始的元素,這個函數列印輸出上述的3個屬性,我們調用這個函數來處理我們之前建立的矩陣。

<code>display_shape(a_matrix)</code>

如圖2-1所示,這個矩陣有9個元素,兩個次元,最後,我們還能在shape參數裡看到維數和每一維的元素個數。在本例中,矩陣有3行3列。

《Python資料科學指南》——2.2 使用NumPy庫

再看另一種建立數組的方法。

numpy的arange函數傳回指定間隔的均勻隔開的數值,本例中,我們所需的是從1到10均勻分布的數值。通路以下url可以擷取更多關于arange的資料。

numpy的linspace和arange類似,差别在于我們需要給出樣例的數量值。使用linspace,我們知道在給定的範圍裡有多少個元素。預設情況下,它傳回50個元素。而使用arange,我們還要指定步長。

numpy給你提供了一些建立特殊數組的函數。

ones()和zero()函數分别用來建立全由1和0填充的矩陣,如圖2-2所示。

機關矩陣的建立方式如下:

《Python資料科學指南》——2.2 使用NumPy庫

參數k控制了1的起始索引值,輸出結果如圖2-3所示。

《Python資料科學指南》——2.2 使用NumPy庫

reshape函數可以控制數組的形态。

通過傳遞參數−1,我們可以将數組轉化為我們所需要的維數,輸入結果如圖2-4所示。

《Python資料科學指南》——2.2 使用NumPy庫

ravel和flatten函數可以用來将矩陣轉化為一維的數組,如圖2-5所示。

《Python資料科學指南》——2.2 使用NumPy庫
《Python資料科學指南》——2.2 使用NumPy庫

我們再看一些矩陣操作,如兩矩陣相加。

再看看矩陣對應元素相乘。

下面是矩陣的乘法操作。

最後,是矩陣的轉置。

min和max函數可以用來找出矩陣中最小和最大的元素,sum函數則用來對矩陣的行或列進行求和,如圖2-6所示。

《Python資料科學指南》——2.2 使用NumPy庫

采用下面的方法将矩陣的元素進行求逆運算。

copy函數可以複制一個矩陣,方法如下。

最後再看一下mgrid函數。

mgrid函數用來查找m維矩陣中的坐标,在前面的示例中,矩陣是三維的,在每一維中,數值的範圍從0到3。我們将xx、yy和zz列印輸出出來以幫助了解,如圖2-7所示。

我們來看每個數組的第1個元素,在本例的三維矩陣空間中,[0,0,0]是第1個坐标,所有3個數組中的第2個元素[0,0,1]是矩陣空間裡的另一個點。據此,使用mgrid函數, 我們能占滿三維坐标系統裡的所有點。

《Python資料科學指南》——2.2 使用NumPy庫

numpy提供了一個random子產品給我們,可以用來定義産生随機數的規則。我們來看産生随機數的示例。

使用random子產品中的randint函數,我們可以生成随機整數。我們需要傳遞start、end和size等3個參數。本例中,我們的起始值為1,結束值為100,步長為10。我們需要介于1到100的10個随機整數,我們得到的傳回結果如圖2-8所示。

《Python資料科學指南》——2.2 使用NumPy庫

我們也可以使用其他包來産生随機數,來看看使用normal包産生10個随機數的示例。

我們使用normal包的normal函數來生成随機數。normal包裡的loc和scale參數分别指定了均值和标準差兩個參數,最後,size參數決定了樣本的數量。

通過傳遞一個行或列的元組,我們也可以産生一個随機的矩陣,示例如下。

上面的示例産生了3×3的矩陣,輸出結果如圖2-9所示。

《Python資料科學指南》——2.2 使用NumPy庫

《analyzing data -explore &amp; wrangle》的第3章中“使用matplotlib進行繪畫的訣竅”部分有相關介紹。

《analyzing data -explore &amp; wrangle》的第3章中“使用scikit learn進行機器學習的訣竅”部分有相關介紹。