理解-NumPy
# 理解 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