天天看點

《Python資料分析》一1.5 一個簡單的應用

本節書摘來自異步社群《python資料分析》一書中的第1章,第1.5節,作者【印尼】ivan idris,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

假設要對向量a和b進行求和。注意,這裡“向量”這個詞的含義是數學意義上的,即一個一維數組。在第3章“統計學與線性代數”中,将遇到一種表示矩陣的特殊numpy數組。向量a存放的是整數0到n-1的2次幂。如果n等于3,那麼a儲存的是0、1和4。向量b存放的是整數0到n的3次幂,是以如果n等于3,那麼向量b等于0、1或者8。如果使用普通的python代碼,該怎麼做呢?

在我們想出了一個解決方案後,可以拿來與等價的numpy方案進行比較。

下面的函數沒有借助numpy,而是使用純python來解決向量加法問題:

下面是利用numpy解決向量加法問題的函數:

注意,numpysum()無需使用for語句。此外,我們使用了來自numpy的arange()函數,它替我們建立了一個含有整數0到n的numpy數組。這裡的arange()函數也是從numpy導入的,是以它加上了字首numpy。

現在到了真正有趣的地方。我們在前言中講過,numpy在進行數組運算時,速度是相當快的。可是,到底有多麼快呢?下面的程式代碼将為我們展示numpysum()和pythonsum()這兩個函數的實耗時間,這裡以微秒為機關。同時,它還會顯示向量sum最後面的兩個元素值。下面來看使用python和numpy能否得到相同的答案:

對于1000個、2000個和3000個向量元素,程式的結果如下所示:

顯而易見,numpy的速度比等價的正常python代碼要快很多。有一件事情是肯定的:無論是否使用numpy,計算結果都是相同的。不過,結果的顯示形式還是有所差别的:numpysum()函數給出的結果不包含逗号。為什麼會這樣?别忘了,我們處理的不是python的清單,而是一個numpy數組。有關numpy數組的更多内容,将在第2章“numpy數組”中詳細介紹。