NumPy之於數值計算特別重要的原因之一,是因為它可以高效處理大數組的數據。
這是因為:
NumPy是在一個連續的內存塊中存儲數據,獨立於其他Python內置對象。NumPy的C語言編寫的算法庫可以操作內存,而不必進行類型檢查或其它前期工作。比起Python的內置序列,NumPy數組使用的內存更少。
NumPy可以在整個數組上執行複雜的計算,而不需要Python的for循環。
接下來我們通過一組實例來了解Numpy算法的優勢
import numpy as np
my_arr = np.arange(1000000)my_list = list(range(1000000))
%time for _ in range(10): my_arr2 = my_arr * 2
out: Wall time: 28.1 ms
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
out: Wall time: 1.06 ms
Numpy的多維數組 -- ndarray
NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。你可以利用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算一樣。
要明白Python是如何利用與標量值類似的語法進行批次計算,我先引入NumPy,然後生成一個包含隨機數據的小數組:
import numpy as np
data = np.random.randn(2,3)data
out:
array([[-0.14098006, -4.19075358, -1.19162879],
[-1.29808759, 0.04365887, 0.81590587]])
然後進行數學運算
data * 10
out:
array([[ -1.40980064, -41.9075358 , -11.91628791],
[-12.98087592, 0.43658872, 8.15905871]])
data + data
out:
array([[-0.28196013, -8.38150716, -2.38325758],
[-2.59617518, 0.08731774, 1.63181174]])
第一個例子中,所有的元素都乘以10。第二個例子中,每個元素都與自身相加。
筆記:在本章及全書中,我會使用標準的NumPy慣用法import numpy as np。你當然也可以在代碼中使用from numpy import *,但不建議這麼做。numpy的命名空間很大,包含許多函數,其中一些的名字與Python的內置函數重名(比如min和max)。
ndarray是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同類型的。每個數組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象):
data.shape
out:
(2, 3)
data.dtype
out:
dtype('float64')
本系列內容將會介紹NumPy數組的基本用法,這足以滿足後續內容的應用,雖然大多數數據分析工作不需要深入理解NumPy,但是精通面向數組的編程和思維方式是成為Python科學計算牛人的一大關鍵步驟。
下期我們將分享,如何創建一個多維數組ndarry。如果喜歡,請點讚收藏,您的支持是我最大的動力!一起加油!