NumPy是用於高性能數組實現的最受歡迎的Python庫:
數組操作比列表操作快得多,列表操作在大數據世界中可能會擴大運行時的差異。根據librarys.io(截至2020年4月),超過4千的圖書館依賴NumPy,包括最受歡迎的數據科學軟體包Pandas和SciPy。
NumPy的不同之處在於它提供的面向數組的編程風格。即代替使用條件for循環來處理所述陣列元件(或嵌套的for循環,當涉及到n維時),它提供了函數式、矢量化與內部迭代,使該陣列的操作更為便捷。
在本文中,你將發現從全部初學者到高級的10多個綜合主題所涵蓋的知識。但是,如果你已經掌握了,就可以直接跳到最後兩個部分(「 進階」和「高階教程」),其中將介紹陣列方向的「難題」以及基本的性能提示。到最後,能夠將過程編程的樣式優化,基於數組的樣式,能夠達到快速而無循環的效果。
數組創建
導入NumPy之後import numpy as np,我們就可以滾動了:
一維
我們可以通過傳遞一個元素列表來創建一個數組。在此示例中,整數:
array = np.array([1, 2, 3, 5, 8, 13, 21])
能在輸出中注意到一些有趣的東西嗎?
所有逗號分隔的值均具有相同的寬度並右對齊。由於最大數量21佔據2個位置,因此所有其他值都被格式化為兩個字符的欄位。所以現在您知道為什麼[和1.之間有一個前置空格。
多維
我們將通過傳遞兩個三個元素的嵌套列表來創建一個2行3列的數組:
array2x3 = np.array([[1, 2, 3], [10, 20, 30]])
輸出的格式基於維數,將每一行中的列對齊:如我們所見,1和10是對齊的,2和20等。
數組的形狀
我們可以使用shape屬性確定數組的形狀,該屬性返回具有尺寸的元組:
以及帶有ndim屬性的維數(即數組的秩),如下所示:
的ndim是相同的軸的數量或長度(len在陣列的形狀的輸出的):
元素數
使用該屬性,size我們可以獲得數組的元素總數:
元素類型和元素大小
由於NumPy用C編寫,因此使用其數據類型。這樣,整數將作為int64值存儲-對應於C中的64位(即8位元組)整數。
通過訪問dtype屬性,可以輕鬆確定數組的元素類型:
通過訪問以下命令以及存儲每個元素所需的字節數itemsize:
itemsize:
記憶體大小
內存佔用量(nbytes)是元素數乘以字節數。
通用數組
來填充特定值的數組,NumPy的提供三個特殊功能:
zeros,ones和full,分別創建包含0,1,或在指定值的陣列。請注意,零和一包含float64值,但是我們顯然可以自定義元素類型。
一維0數組: zeros = np.zeros(5)
一維0s數組,類型為整數: zeros_int = np.zeros(5, dtype = int)
1秒的2D數組(2x5): ones = np.ones((2, 5))
2s的2D數組(2x5): full = np.full((2, 5), 7)
均勻分布的範圍
NumPy提供了用於從範圍創建數組的優化功能。創建均勻間隔範圍的兩個最重要的函數分別是arange和linspace,分別用於整數和浮點數。
In整數:給定間隔
np.arange(start, stop, step):在半開間隔[start, stop)(即包括開始但不包括停止的間隔)內生成值。默認start值為0,默認step大小為1。
範圍從0到4,增量為1:np.arange(5)
範圍從5到9,增量為1:np.arange(5, 10)
範圍從2到8,增量為2:np.arange(2, 10, 2)
範圍從8到2,以-2為增量:np.arange(8, 0, -2)
F浮點數:給定元素數量
np.linspace(start, stop, num, endpoint):返回num間隔上計算得出的均勻間隔的樣本[start, stop]。所述endpoint的時間間隔的可任選地被排除。默認num值為50,默認endpoint值為True。
5個均勻間隔的元素,範圍從1.0到2.0(不包括2.0):np.linspace(1, 2, num = 5, endpoint = False)
從1.0到2.0(包括2.0)的5個等距元素:np.linspace(1, 2, num = 5, endpoint = True)
儘管我們可將範圍作為參數傳遞的方式來創建數組,但還是選擇內置函數,因為它們針對性能進行了優化。
Random隨機整數
np.random.randint(low, high, size):從low(包括)到high(不包括)返回隨機整數。如果high為None(默認值),則結果來自[0, low)。
從1到99的10個隨機整數:np.random.randint(low = 1, high = 100, size = 10)