必須要懂的機器學習和數據科學最流行的Python庫——NumPy

NumPy是Numerical Python的簡稱,是Python的支持矢量運算的面向N維數組的一個運算庫,目前在機器學習和數據科學領域被廣泛使用,並且當前許多支持科學計算的工具包都是基於NumPy開發的,例如pandas,,scikit-learn,TensorFlow等。

NumPy最大的特點是其對象ndarray,其存儲形式是N維的數組,我們可以將NumPy的1維數據看成是向量,多維數據看成是矩陣,可以把NumPy的計算看成是向量或矩陣運算,這點跟MATLAB特別相似。

說到數組,或許你可能有疑問了,Python本身就包含列表(list)和數組(array),為什麼我們非要用NumPy而不用常規的Python數組呢?這主要是因為NumPy的算法庫都是由C語言編寫,可以直接操作內存,所以極大的提高了運行效率,一般基於NumPy的算法要比純Python快10-100倍,並且佔用的內存更少,可以說是既快又省。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

基於NumPy的數據結構特點,本文主要從NumPy的一維數組(可以理解為向量)多維數組(可以理解為矩陣)2個方面進行介紹,以便於大家系統性的學習NumPy。

一維數組(向量)

  • 創建數組

最基本的方式是利用NumPy的array()函數通過列表創建數組。


必須要懂的機器學習和數據科學最流行的Python庫——NumPy

在實際應用中,我們經常會用到一些已經初始化的數組,比如全0數組、全1數組、隨機數組等等。NumPy也提供了相應的函數zeros()、ones()、random()等函數。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 數組運算

NumPy對於長度相等的一維數組的運算都會將運算應用到元素級,事實上就是向量的縮放、向量的加減法,需要注意的是兩個數組相乘跟點積是不一樣的。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 數組的索引和切片

NumPy對於一維數組的索引與Python中列表的索引沒什麼區別。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 聚合

NumPy中ndarray是一個對象,提供了許多聚合方法用於對象的操作,例如求最大值、最小值、均值等等。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

多維數組(矩陣)

  • 創建矩陣

同一維數組類似,矩陣的創建既可以通過基本的列表操作實現,也可以用上面提到的初始化函數zeros()、ones()、random()等函數,只不過需要相應的增加維度。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 矩陣運算

NumPy中矩陣的加減運算同樣將

行列數相等的矩陣應用到元素級,NumPy有個很好的功能叫廣播(broadcast ),既對於行列數不同的矩陣,只要有一個矩陣的行數或列數與另一個矩陣一致,並且是一個一維矩陣,那麼2個矩陣在作運算時,NumPy會自動把那個一維矩陣補充成完整的多維矩陣。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 點積

NumPy提供了矩陣之間的點積運行函數dot(),可以直接計算矩陣的點積。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 索引和切片

同樣的,矩陣的索引和切片與Python中2維數組類似,第一個維度對應於行,第二個維度對應於列,取多個元素可以用“:”。


必須要懂的機器學習和數據科學最流行的Python庫——NumPy

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 矩陣聚合

矩陣同樣支持聚合操作,除了對所有值進行聚合,NumPy還支持對特定的軸進行聚合,axis=0(既0軸)表示對橫軸進行操作,在計算上是沿著橫軸方向一列一列計算;axis=1(既1軸)表示對縱軸進行操作,在計算上是沿著縱軸方向一行一行計算。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

  • 矩陣變換

在線性代數中常常用到舉證的變換,例如矩陣轉置、矩陣重塑。NumPy提供了.T屬性用於矩陣的轉置,reshape()函數用於矩陣的重塑。

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

必須要懂的機器學習和數據科學最流行的Python庫——NumPy

總結

NumPy在Python線性代數的運算中提供了非常好的數據結構,其ndarray對象擁有許多方便的方法和屬性,並且其良好的運算性能也是純Python不能替代的,所以在機器學習中NumPy是非常強大的存在,學好NumPy是機器學習實現各種算法的基礎。


分享到:


相關文章: