Numpy 中的陣列是一個元素表(通常是數字),所有元素型別相同,由正整數元組索引。在 Numpy 中,陣列的維數稱為陣列的秩。給出陣列沿每個維的大小的整數元組稱為陣列的形狀。Numpy 中的陣列類稱為ndarray。Numpy 陣列中的元素可以使用方括號訪問,並且可以使用巢狀的 Python 列表進行初始化。
例子 :
[[ 1, 2, 3], [ 4, 2, 5]] Here, rank = 2 (as it is 2-dimensional or it has 2 axes) First dimension(axis) length = 2, second dimension has length = 3 overall shape can be expressed as: (2, 3) 複製程式碼 # 演示基本陣列特徵的 Python 程式 import numpy as np # 建立陣列物件 arr = np.array( [[ 1, 2, 3], [ 4, 2, 5]] ) # arr 物件的列印型別 print("Array is of type: ", type(arr)) # 列印陣列維度(軸) print("No. of dimensions: ", arr.ndim) # 陣列的列印形狀 print("Shape of array: ", arr.shape) # 陣列的列印大小(元素總數) print("Size of array: ", arr.size) # 列印陣列中元素的型別 print("Array stores elements of type: ", arr.dtype)
輸出 :
Array is of type: <class 'numpy.ndarray'> No. of dimensions: 2 Shape of array: (2, 3) Size of array: 6 Array stores elements of type: int64
陣列建立
在 NumPy 中有多種建立陣列的方法。
例如,您可以使用array函式從常規 Python列表或元組建立一個陣列。 結果陣列的型別是從序列中元素的型別推匯出來的。****
通常,陣列的元素最初是未知的,但它的大小是已知的。因此,NumPy 提供了幾個函式來建立具有初始佔位符內容的陣列。這些最大限度地減少了增長陣列的必要性,這是一項昂貴的操作。
例如: np.zeros、np.ones、np.full、np.empty 等。
為了建立數字序列,NumPy 提供了一個類似於 range 的函式,它返回陣列而不是列表。
arange: 返回給定間隔內均勻分佈的值。步長是指定的。
linspace: 返回給定間隔內均勻分佈的值。編號_ 的元素被返回。
重塑陣列: 我們可以使用reshape方法來重塑陣列。考慮一個形狀為 (a1, a2, a3, ..., aN) 的陣列。我們可以重新整形並將其轉換為另一個形狀為 (b1, b2, b3, ..., bM) 的陣列。需要的條件是:
a1 x a2 x a3 … x aN = b1 x b2 x b3 … x bM 。(即陣列的原始大小保持不變。)
扁平化陣列: 我們可以使用扁平化方法將陣列的副本摺疊成一維。它接受order引數。預設值為“C”(用於行優先順序)。使用“F”表示列主要順序。
注意: 陣列的型別可以在建立陣列時顯式定義。
# 演示陣列建立技術的 Python 程式 import numpy as np # 從浮點型別的列表建立陣列 a = np.array([[1, 2, 4], [5, 8, 7]], dtype = 'float') print ("Array created using passed list:\n", a) # 從元組建立陣列 b = np.array((1 , 3, 2)) print ("\nArray created using passed tuple:\n", b) # 建立一個全為零的 3X4 陣列 c = np.zeros((3, 4)) print ("\nAn array initialized with all zeros:\n", c) # 建立一個複雜型別的常量值陣列 d = np.full((3, 3), 6, dtype = 'complex') print ("\nAn array initialized with all 6s." "Array type is complex:\n", d)
輸出 :
Array created using passed list: [[ 1. 2. 4.] [ 5. 8. 7.]] Array created using passed tuple: [1 3 2] An array initialized with all zeros: [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] An array initialized with all 6s. Array type is complex: [[ 6.+0.j 6.+0.j 6.+0.j] [ 6.+0.j 6.+0.j 6.+0.j] [ 6.+0.j 6.+0.j 6.+0.j]]
陣列索引
瞭解陣列索引的基礎知識對於分析和運算元組物件很重要。NumPy 提供了許多方法來進行陣列索引。
切片: 就像 python 中的列表一樣,NumPy 陣列可以切片。由於陣列可以是多維的,因此您需要為陣列的每個維度指定一個切片。
整數陣列索引: 在此方法中,傳遞列表以對每個維度進行索引。完成對應元素的一對一對映以構造一個新的任意陣列。
布林陣列索引: 當我們想從陣列中選擇滿足某些條件的元素時使用此方法。
# 在 numpy 中演示索引的 Python 程式 import numpy as np # 一個示例陣列 arr = np.array([[-1, 2, 0, 4], [4, -0.5, 6, 0], [2.6, 0, 7, 8], [3, -7, 4, 2.0]]) # 切片陣列 temp = arr[:2, ::2] print ("Array with first 2 rows and alternate" "columns(0 and 2):\n", temp) # 整數陣列索引示例 temp = arr[[0, 1, 2, 3], [3, 2, 1, 0]] print ("\nElements at indices (0, 3), (1, 2), (2, 1)," "(3, 0):\n", temp) # 布林陣列索引示例 cond = arr > 0 # cond is a boolean array temp = arr[cond] print ("\nElements greater than 0:\n", temp)
輸出 :
Array with first 2 rows and alternatecolumns(0 and 2): [[-1. 0.] [ 4. 6.]] Elements at indices (0, 3), (1, 2), (2, 1),(3, 0): [ 4. 6. 0. 3.] Elements greater than 0: [ 2. 4. 4. 6. 2.6 7. 8. 3. 4. 2. ]
基本操作
NumPy 提供了大量的內建算術函式。
對單個陣列的操作: 我們可以使用過載的算術運算子對陣列進行元素操作以建立一個新陣列。在 +=、-=、*= 運算子的情況下,將修改現有陣列。
# 演示單個陣列的基本操作的 Python 程式 import numpy as np a = np.array([1, 2, 5, 3]) # 每個元素加 1 print ("Adding 1 to every element:", a+1) # 從每個元素中減去 3 print ("Subtracting 3 from each element:", a-3) # 將每個元素乘以 10 print ("Multiplying each element by 10:", a*10) # 平方每個元素 print ("Squaring each element:", a**2) # 修改現有陣列 a *= 2 print ("Doubled each element of original array:", a) # 陣列轉置 a = np.array([[1, 2, 3], [3, 4, 5], [9, 6, 0]]) print ("\nOriginal array:\n", a) print ("Transpose of array:\n", a.T)
輸出 :
Adding 1 to every element: [2 3 6 4] Subtracting 3 from each element: [-2 -1 2 0] Multiplying each element by 10: [10 20 50 30] Squaring each element: [ 1 4 25 9] Doubled each element of original array: [ 2 4 10 6] Original array: [[1 2 3] [3 4 5] [9 6 0]] Transpose of array: [[1 3 9] [2 4 6] [3 5 0]]
一元運算子:許多一元運算作為 ndarray類的方法提供。這包括 sum、min、max 等。這些函式也可以透過設定軸引數來逐行或逐列應用。
# 在 numpy 中演示一元運算子的 Python 程式 import numpy as np arr = np.array([[1, 5, 6], [4, 7, 2], [3, 1, 9]]) # 陣列的最大元素 print ("Largest element is:", arr.max()) print ("Row-wise maximum elements:", arr.max(axis = 1)) # 陣列的最小元素 print ("Column-wise minimum elements:", arr.min(axis = 0)) # 陣列元素之和 print ("Sum of all array elements:", arr.sum()) # 每行的累積總和 print ("Cumulative sum along each row:\n", arr.cumsum(axis = 1))
輸出 :
Largest element is: 9 Row-wise maximum elements: [6 7 9] Column-wise minimum elements: [1 1 2] Sum of all array elements: 38 Cumulative sum along each row: [[ 1 6 12] [ 4 11 13] [ 3 4 13]]
二元運算子: 這些操作適用於陣列元素並建立一個新陣列。您可以使用所有基本的算術運算子,如 +、-、/、等。如果是 +=、-=、 = 運算子,則會修改現有陣列。
# 在 Numpy 中演示二元運算子的 Python 程式 import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[4, 3], [2, 1]]) # 新增陣列 print ("Array sum:\n", a + b) # 乘法陣列(元素乘法) print ("Array multiplication:\n", a*b) # 矩陣乘法 print ("Matrix multiplication:\n", a.dot(b))
輸出:
Array sum: [[5 5] [5 5]] Array multiplication: [[4 6] [6 4]] Matrix multiplication: [[ 8 5] [20 13]]
通用函式 (ufunc): NumPy 提供熟悉的數學函式,例如 sin、cos、exp 等。這些函式還對陣列進行元素操作,生成陣列作為輸出。
注意: 我們上面使用過載運算子所做的所有操作都可以使用 ufunc 完成,例如 np.add、np.subtract、np.multiply、np.divide、np.sum 等。
# 在 numpy 中演示通用函式的 Python 程式 import numpy as np # 建立一個正弦值陣列 a = np.array([0, np.pi/2, np.pi]) print ("Sine values of array elements:", np.sin(a)) # exponential values a = np.array([0, 1, 2, 3]) print ("Exponent of array elements:", np.exp(a)) # square root of array values print ("Square root of array elements:", np.sqrt(a))
輸出:
Sine values of array elements: [ 0.00000000e+00 1.00000000e+00 1.22464680e-16] Exponent of array elements: [ 1. 2.71828183 7.3890561 20.08553692] Square root of array elements: [ 0. 1. 1.41421356 1.73205081]