1. 程式人生 > >理解-NumPy

理解-NumPy

# 理解 NumPy

在這篇文章中,我們將介紹使用NumPy的基礎知識,NumPy是一個功能強大的Python庫,允許更高階的資料操作和數學計算。

# 什麼是 NumPy?

NumPy是一個功能強大的Python庫,主要用於對多維陣列執行計算。NumPy這個詞來源於兩個單詞-- NumericalPython。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)的所有元素。在這裡,我們肉眼可以看出,第二列由兩個元素組成:51。為此,我們可以執行以下操作:

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