NumPy 陣列大全
NumPy 是一個Python 庫,用於 Python 程式設計中的科學計算。在本教程中,你將學習如何在 NumPy 陣列上以多種方式新增、刪除、排序和操作元素。
NumPy 提供了一個多維陣列物件和其他派生陣列,例如掩碼陣列和掩碼多維陣列。
為什麼要用 NumPy
NumPy 提供了一個 ndarray 物件,可以使用它來對任何維度的陣列進行操作。 ndarray 代表 N 維陣列,其中 N 是任意數字。這意味著 NumPy 陣列可以是任何維度的。
與 Python 的 List 相比,NumPy 具有許多優勢。我們可以在 NumPy 陣列上執行高效能操作,例如:
- 對陣列成員進行排序
- 數學和邏輯運算
- 輸入/輸出功能
- 統計和線性代數運算
安裝 NumPy
要安裝NumPy,你的電腦上要先有 Python 和 Pip。
在終端中執行以下命令:
pip install numpy
然後你就可以在指令碼中匯入 NumPy 了,如下所示:
import numpy
新增陣列元素
可以用 NumPy 模組的append()
方法向 NumPy 陣列中新增元素。
append()
的語法如下:
numpy.append(array, value, axis)
value
會被追加到在陣列的末尾,並返回一個包含所有元素的 ndarray。
引數axis
是一個可選的整數,用於定義陣列的顯示方式。如果沒有指定,則陣列結構將展平,稍後會演示用法。
以下示例,其中首先宣告陣列,然後用append
方法向陣列新增更多的值:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.append (a, [10, 11, 12]) print(newArray) # 輸出:[ 123 10 11 12]
新增一列
也可以用NumPy 的append()
方法插入一列。
在下面的例子中,我們建立了一個二維陣列並插入了兩列:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6]]) b = numpy.array([[400], [800]]) newArray = numpy.append(a, b, axis = 1) print(newArray) """ 輸出: [[123 400] [456 800]] """
如果沒有使用axis
引數,則會輸出:
[123456 400 800]
這就是陣列結構的扁平化。
在 NumPy 中,還可以用insert()
方法插入元素或列。兩者之間的區別在於insert()
方法可以指定要在哪個索引處新增元素,但append()
方法會在陣列的末尾新增一個值。
Consider the example below:
考慮以下示例:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.insert(a, 1, 90) print(newArray) # 輸出:[ 1 9023]
這裡insert()
方法在索引1處新增元素。在Python中陣列索引從0開始。
追加一行
也可以用append()
方法向陣列新增行,就像在陣列中附加元素一樣簡單:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6]]) newArray = numpy.append(a, [[50, 60, 70]], axis = 0) print(newArray) """ 輸出“ [[ 123] [ 456] [50 60 70]] """
刪除元素
可以用 NumPy 模組的delete()
方法刪除 NumPy 陣列元素:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.delete(a, 1, axis = 0) print(newArray) # 輸出:[1 3]
在本例子中,我們有一個一維陣列,用delete()
方法從陣列中刪除了索引 1 處的元素。
刪除一行
同樣,你也可以用delete()
方法刪除行。
下面的例子中我們從二維陣列中刪除了一行:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]]) newArray = numpy.delete(a, 1, axis = 0) print(newArray) """ 輸出: [[ 123] [10 20 30]] """
在delete()
方法中,首先給出陣列,然後給出要刪除的元素的索引。在上例中,我們刪除了索引為 1 的元素。
檢查 NumPy 陣列是否為空
可以用size
方法返回陣列中元素的總數。
在下面的例子中有一個 if 語句,通過ndarray.size
檢查陣列中是否有元素,其中 ndarray 可以是任何給定的 NumPy 陣列:
import numpy a = numpy.array([1, 2, 3]) if(a.size == 0): print("The given Array is empty") else: print("The array = ", a) # 輸出:The array =[1 2 3]
在上面的程式碼中,陣列中有三個元素,因此它不是空的,判斷條件將返回false。如果陣列中沒有元素,則 if 條件會變為 true 並且將列印空訊息。如果陣列等於:
a = numpy.array([])
上述程式碼將會輸出:
The given Array is empty
查詢值的索引
要查詢值對應的索引,可以用 NumPy 模組的where()
方法,如下例所示:
import numpy a = numpy.array([1, 2, 3, 4, 5]) print("5 is found at index: ", numpy.where(a == 5)) # 輸出:5 is found at index:(array([4]),)
如果你只想得到索引,可以這樣寫:
import numpy a = numpy.array([1, 2, 3, 4, 5]) index = numpy.where(a == 5) print("5 is found at index: ", index[0]) #輸出: 5 is found at index:[4]
NumPy 陣列切片
陣列切片是從給定陣列中提取子集的過程。你可以用冒號(:
)運算子對陣列進行切片,並指定陣列索引的開始和結束位置,例如:
array[from:to]
下面的例子中提取從索引 2 到索引 5 的元素:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8]) print("A subset of array a = ", a[2:5]) # 輸出:A subset of array a =[3 4 5]
如果想要提取最後三個元素,可以通過用負切片來完成操作,如下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8]) print("A subset of array a = ", a[-3:]) # 輸出:A subset of array a =[6 7 8]
將函式作用於所有陣列元素
在下面的例子中,我們將建立一個 lambda 函式,並傳入一個數組,以其應用於所有元素:
import numpy addition = lambda x: x + 2 a = numpy.array([1, 2, 3, 4, 5, 6]) print("Array after addition function: ", addition(a)) # 輸出:Array after addition function:[3 4 5 6 7 8]
在此例中,建立了一個 lambda 函式,它使每個元素都遞增 2。
NumPy 陣列的長度
要得到 NumPy 陣列的長度,可以用size
屬性,如下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6]) print("The size of array = ", a.size) # 輸出:The size of array =6
從 list 建立 NumPy 陣列
假設你有一個列表:
l = [1, 2, 3, 4, 5]
現在要根據這個列表建立一個數組,可以用 NumPy 模組的array()
方法:
import numpy l = [1, 2, 3, 4, 5] a = numpy.array(l) print("The NumPy array from Python list = ", a) # 輸出:The NumPy array from Python list =[1 2 3 4 5]
同樣,使用array()
方法,也可以從元組建立 NumPy 陣列。如下所示:
import numpy t = (1, 2, 3, 4, 5) a = numpy.array(t) print("The NumPy array from Python Tuple = ", a) # 輸出:The NumPy array from Python Tuple =[1 2 3 4 5]
將 NumPy 陣列轉換為 list
要將陣列轉換為list,可以使用 NumPy 模組的tolist()
方法。
import numpy a = numpy.array([1, 2, 3, 4, 5]) print("Array to list = ", a.tolist()) # 輸出:Array to list =[1, 2, 3, 4, 5]
在這段程式碼中,我們簡單地呼叫了tolist()
方法,該方法將陣列轉換為列表。然後將新建立的列表列印到輸出螢幕。
把 NumPy 陣列匯出為 CSV
要將陣列匯出為 CSV 檔案,可以用 NumPy 模組的savetxt()
方法,如下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5]) numpy.savetxt("myArray.csv", a)
此程式碼將在 Python 程式碼檔案所在路徑下生成 CSV 檔案。當然你也可以指定路徑。
該檔案的內容如下:
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00
你可以把額外填充的零刪除,如下所示:
numpy.savetxt("myArray.csv", a,fmt='%.2f')
對 NumPy 陣列排序
可以用 NumPy 模組的sort()
方法對 NumPy 陣列進行排序:
sort()
函式有一個可選引數axis
(整數),預設為-1
。axis
指定我們要對陣列進行排序的軸。-1
表示將根據最後一個軸對陣列進行排序。
import numpy a = numpy.array([16, 3, 2, 6, 8, 10, 1]) print("Sorted array = ", numpy.sort(a)) # 輸出:Sorted array =[ 12368 10 16]
在這個例子中,我們在 print 語句中呼叫了sort()
方法。陣列a
被傳遞給sort
函式。
歸一化陣列
歸一化陣列是指將陣列的值置於某個定義範圍的過程。例如,我們想要在 -1 和 1 之間對陣列進行歸一化,依此類推。
歸一化的公式如下:
x = (x – xmin) / (xmax – xmin)
現在把這個公式用於我們的陣列。要查詢陣列中的最大和最小項,可以分別用 NumPy 的max()
和min()
方法。
import numpy x= numpy.array([400, 800, 200, 700, 1000, 2000, 300]) xmax = x.max() xmin = x.min() x = (x - xmin)/(xmax - xmin) print("After normalization array x = \n", x) """ 輸出: After normalization array x = [0.11111111 0.33333333 0.0.27777778 0.44444444 1. 0.05555556] """
陣列索引
索引指向陣列中的一個元素。在下面的例子中,分別用到了一維和二維陣列中的索引:
import numpy a = numpy.array([20, 13, 42, 86, 81, 9, 11]) print("Element at index 3 = ", a[3]) # 輸出:Element at index 3 =86
下面是二維陣列:
import numpy a = numpy.array([[20, 13, 42], [86, 81, 9]]) print("Element at index a[1][2] = ", a[1][2]) # 輸出:Element at index a[1][2] =9
索引[1][2]
表示第二行和第三列(索引從0
開始)。因此在螢幕上輸出9
。
將 NumPy 陣列附加到另一個數組上
可以用append()
方法將 NumPy 陣列附加到另一個 NumPy 陣列上。
import numpy a = numpy.array([1, 2, 3, 4, 5]) b = numpy.array([10, 20, 30, 40, 50]) newArray = numpy.append(a, b) print("The new array = ", newArray) # 輸出:The new array =[ 12345 10 20 30 40 50]
在此例中,建立兩個 NumPy 陣列a
,b
。然後把兩個陣列傳給append()
。當陣列b
作為第二個引數傳遞時,將被新增到陣列a
的末尾。
總結
正如大家所見,NumPy 陣列用起來非常簡單。在使用很多機器學習庫時,NumPy 陣列非常重要。可以說NumPy 是人工智慧的大門。