理解-NumPy
- 2019 年 10 月 3 日
- 筆記
# 理解 NumPy
在這篇文章中,我們將介紹使用NumPy的基礎知識,NumPy是一個功能強大的Python庫,允許更高級的數據操作和數學計算。
# 什麼是 NumPy?
NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞– Numerical
和Python
。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。這類數值計算廣泛用於以下任務:
-
機器學習模型:在編寫機器學習演算法時,需要對矩陣進行各種數值計算。例如矩陣乘法、換位、加法等。NumPy提供了一個非常好的庫,用於簡單(在編寫程式碼方面)和快速(在速度方面)計算。NumPy數組用於存儲訓練數據和機器學習模型的參數。
-
影像處理和電腦圖形學:電腦中的影像表示為多維數字數組。NumPy成為同樣情況下最自然的選擇。實際上,NumPy提供了一些優秀的庫函數來快速處理影像。例如,鏡像影像、按特定角度旋轉影像等。
-
數學任務:NumPy對於執行各種數學任務非常有用,如數值積分、微分、內插、外推等。因此,當涉及到數學任務時,它形成了一種基於Python的MATLAB的快速替代。
# NumPy 的安裝
在你的電腦上安裝NumPy的最快也是最簡單的方法是在shell上使用以下命令:pip install numpy
。
這將在你的電腦上安裝最新/最穩定的NumPy版本。通過PIP安裝是安裝任何Python軟體包的最簡單方法。現在讓我們來談談NumPy中最重要的概念,NumPy數組。
# NumPy 中的數組
NumPy提供的最重要的數據結構是一個稱為NumPy數組的強大對象。NumPy數組是通常的Python數組的擴展。NumPy數組配備了大量的函數和運算符,可以幫助我們快速編寫上面討論過的各種類型計算的高性能程式碼。讓我們看看如何快速定義一維NumPy數組:
import numpy as np my_array = np.array([1, 2, 3, 4, 5]) print my_array
在上面的簡單示例中,我們首先使用import numpy作為np導入NumPy庫。然後,我們創建了一個包含5個整數的簡單NumPy數組,然後我們將其列印出來。繼續在自己的機器上試一試。在看 「NumPy安裝」 部分下面的步驟的時候,請確保已在電腦中安裝了NumPy。
現在讓我們看看我們可以用這個特定的NumPy數組能做些什麼。
print my_array.shape
它會列印我們創建的數組的形狀:(5, )
。意思就是 my_array 是一個包含5個元素的數組。
我們也可以列印各個元素。就像普通的Python數組一樣,NumPy數組的起始索引編號為0。
print my_array[0] print my_array[1]
上述命令將分別在終端上列印1和2。我們還可以修改NumPy數組的元素。例如,假設我們編寫以下2個命令:
my_array[0] = -1 print my_array
我們將在螢幕上看到:[-1,2,3,4,5]
。
現在假設,我們要創建一個長度為5的NumPy數組,但所有元素都為0,我們可以這樣做嗎?是的。NumPy提供了一種簡單的方法來做同樣的事情。
my_new_array = np.zeros((5)) print my_new_array
我們將看到輸出了 [0., 0., 0., 0., 0.]
。與 np.zeros
類似,我們也有 np.ones
。 如果我們想創建一個隨機值數組怎麼辦?
my_random_array = np.random.random((5)) print my_random_array
我們得到的輸出看起來像 [0.22051844 0.35278286 0.11342404 0.79671772 0.62263151] 這樣的數據。你獲得的輸出可能會有所不同,因為我們使用的是隨機函數,它為每個元素分配0到1之間的隨機值。
現在讓我們看看如何使用NumPy創建二維數組。
my_2d_array = np.zeros((2, 3)) print my_2d_array
這將在螢幕上列印以下內容:
[[0. 0. 0.] [0. 0. 0.]]
猜猜以下程式碼的輸出結果如何:
my_2d_array_new = np.ones((2, 4)) print my_2d_array_new
這裡是:
[[1. 1. 1. 1.] [1. 1. 1. 1.]]
基本上,當你使用函數np.zeros()
或np.ones()
時,你可以指定討論數組大小的元組。在上面的兩個例子中,我們使用以下元組,(2, 3) 和(2, 4) 分別表示2行,3列和4列。像上面那樣的多維數組可以用 my_array[i][j]
符號來索引,其中i表示行號,j表示列號。i和j都從0開始。
my_array = np.array([[4, 5], [6, 1]]) print my_array[0][1]
上面的程式碼片段的輸出是5,因為它是索引0行和索引1列中的元素。
你還可以按如下方式列印my_array的形狀:
print my_array.shape
輸出為(2, 2),表示數組中有2行2列。
NumPy提供了一種提取多維數組的行/列的強大方法。例如,考慮我們上面定義的my_array
的例子。
[[4 5] [6 1]]
假設,我們想從中提取第二列(索引1)的所有元素。在這裡,我們肉眼可以看出,第二列由兩個元素組成:5
和 1
。為此,我們可以執行以下操作:
my_array_column_2 = my_array[:, 1] print my_array_column_2
注意,我們使用了冒號(:
)而不是行號,而對於列號,我們使用了值1
,最終輸出是:[5, 1]
。
我們可以類似地從多維NumPy數組中提取一行。現在,讓我們看看NumPy在多個陣列上執行計算時提供的強大功能。
# NumPy中的數組操作
使用NumPy,你可以輕鬆地在數組上執行數學運算。例如,你可以添加NumPy數組,你可以減去它們,你可以將它們相乘,甚至可以將它們分開。 以下是一些例子:
import numpy as np a = np.array([[1.0, 2.0], [3.0, 4.0]]) b = np.array([[5.0, 6.0], [7.0, 8.0]]) sum = a + b difference = a - b product = a * b quotient = a / b print "Sum = n", sum print "Difference = n", difference print "Product = n", product print "Quotient = n", quotient # The output will be as follows: Sum = [[ 6. 8.] [10. 12.]] Difference = [[-4. -4.] [-4. -4.]] Product = [[ 5. 12.] [21. 32.]] Quotient = [[0.2 0.33333333] [0.42857143 0.5 ]]
如你所見,乘法運算符執行逐元素乘法而不是矩陣乘法。 要執行矩陣乘法,你可以執行以下操作:
matrix_product = a.dot(b) print "Matrix Product = ", matrix_product
輸出將是:
[[19. 22.] [43. 50.]]
# 總結
如你所見,NumPy在其提供的庫函數方面非常強大。你可以使用NumPy公開的優秀的API在單行程式碼中執行大型計算。這使它成為各種數值計算的優雅工具。如果你希望自己成為一名數學家或數據科學家,你一定要考慮掌握它。在熟練掌握NumPy之前,你需要了解Python。
你可以在 Hackr.io 上找到編程社區推薦的最佳Python 教程,願上帝保佑你!
# 文章出處
由NumPy中文文檔翻譯,原作者為 Vijay Singh,翻譯至:https://dzone.com/articles/understanding-numpy。