Python – NumPy陣列操作


NumPy(Numerical Python)是Python中一個功能強大的科學計算庫。它提供高效能的多維陣列物件以及用於處理這些陣列的工具。NumPy提供靈活的方式來訪問陣列中的元素。您可以使用索引和切片操作來檢索陣列的特定元素或部分。

索引

在NumPy中,索引從0開始,類似於Python列表。您可以透過在方括號內指定其索引來訪問陣列的單個元素。例如,給定一個數組arr,您可以使用arr[i]訪問索引為i的元素。

切片

NumPy陣列也支援切片,它允許您檢索陣列的一部分。切片使用冒號(:)運算子完成。切片的基本語法是start:stop:step,其中start是起始索引,stop是結束索引(不包括),step是索引之間的增量。

NumPy陣列切片操作示例:

  • arr[2:6] 檢索索引2到5的元素(不包括6)。

  • arr[3:] 檢索從索引3到陣列末尾的元素。

  • arr[::2] 以2為步長檢索元素(跳過每個其他元素)。

  • arr[::-1] 反向檢索元素。

布林索引

NumPy允許您使用布林陣列作為掩碼,根據某些條件訪問元素。例如,您可以建立一個布林陣列,指示陣列中哪些元素滿足特定條件,然後使用該陣列作為掩碼來檢索相應的元素。

示例

這是一個布林索引的示例:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
mask = arr > 2

print(arr[mask])  

輸出

[3, 4, 5]

整數陣列索引

NumPy允許您使用整數陣列作為索引來訪問特定元素。此技術稱為整數陣列索引。透過傳遞索引陣列,您可以檢索與這些索引對應的元素。

示例

這是一個整數陣列索引的示例:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
indices = np.array([0, 2, 4])

print(arr[indices])  

輸出

[1, 3, 5]

透過掌握這些技術,您可以有效地從NumPy陣列中提取和處理所需的資料。

陣列操作

重塑陣列

NumPy允許您使用reshape()函式重塑陣列。重塑陣列會更改其維度,同時保持元素總數不變。reshape()函式接收所需的形狀作為元組,並返回具有指定維度的新的陣列。

示例

這是一個重塑陣列的示例:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))

print(reshaped_arr)

輸出

[[1 2 3]
[4 5 6]]

在上面的示例中,包含六個元素的原始陣列arr被重塑為一個2x3的陣列reshaped_arr。重塑後的陣列保留了原始陣列的元素,但以指定的形狀排列它們。

您還可以使用reshape()函式將多維陣列轉換為一維陣列。透過將形狀指定為-1,NumPy會根據元素總數自動計算合適的維度。

示例

這是一個將多維陣列轉換為一維陣列的示例:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape(-1)

print(reshaped_arr)

輸出

[1 2 3 4 5 6]

連線陣列

NumPy提供諸如**numpy.concatenate()**和**numpy.stack()**之類的函式,用於沿不同軸組合多個數組。連線允許您水平或垂直連線陣列,有效地增加其大小或將它們組合成一個更大的陣列。

  • **numpy.concatenate()** – 此函式沿現有軸連線陣列。預設情況下,它按行連線陣列(軸0),但您可以指定**axis**引數沿不同的軸連線。

示例

這是一個使用**numpy.concatenate()**連線陣列的示例:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

concatenated_arr = np.concatenate((arr1, arr2), axis=0)

print(concatenated_arr)

輸出

[[1 2]
[3 4]
[5 6]]

在上面的示例中,**arr1**和**arr2**沿軸0連線,生成一個新的陣列**concatenated_arr**。

  • **numpy.stack()** – 此函式沿新軸堆疊陣列。它接收一系列陣列和**axis**引數,以指定將沿其堆疊陣列的新軸。

示例

這是一個使用**numpy.stack()**堆疊陣列的示例:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

stacked_arr = np.stack((arr1, arr2), axis=1)

print(stacked_arr)

輸出

[[1 4]
[2 5]
[3 6]]

在上面的示例中,**arr1**和**arr2**沿新軸(軸1)堆疊,生成一個新的陣列**stacked_arr**。

陣列的數學運算

基本算術運算

NumPy允許您對陣列執行基本的算術運算,例如加法、減法、乘法和除法。這些運算逐元素執行,這意味著單獨運算元組的對應元素。

示例

以下是陣列基本算術運算的示例:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

addition = arr1 + arr2
subtraction = arr1 - arr2
multiplication = arr1 * arr2
division = arr1 / arr2

print(addition)      
print(subtraction)  
print(multiplication)
print(division)       

輸出

[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]

在上面的示例中,基本的算術運算逐元素應用於**arr1**和**arr2**的對應元素,生成新的陣列addition、subtraction、multiplication和division。

數學函式

NumPy提供了廣泛的數學函式,可以逐元素應用於陣列。這些函式包括三角函式、對數函式、指數函式等等。

示例

以下是將數學函式應用於陣列的示例:

import numpy as np

arr = np.array([1, 2, 3])

sin_values = np.sin(arr)
log_values = np.log(arr)
exp_values = np.exp(arr)

print(sin_values)  
print(log_values)  
print(exp_values)  

輸出

[0.84147098 0.90929743 0.14112001]
[0.         0.69314718 1.09861229]
[ 2.71828183  7.3890561  20.08553692]

在上面的示例中,np.sin()、np.log()和np.exp()函式逐元素應用於陣列arr,生成新的陣列sin_values、log_values和exp_values。

統計函式

NumPy提供各種統計函式,用於計算陣列上的統計量度。這些函式包括計算平均值、標準差、最小值、最大值等等。

示例

以下是使用陣列統計函式的示例:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

mean_value = np.mean(arr)
std_value = np.std(arr)
min_value = np.min(arr)
max_value = np.max(arr)

print(mean_value)  
print(std_value)   
print(min_value)   
print(max_value)  

輸出

3.0
1.4142135623730951
1
5

在上面的示例中,np.mean()、np.std()、np.min()和np.max()函式用於計算陣列arr的平均值、標準差、最小值和最大值。

結論

NumPy陣列是Python中科學計算的基本資料結構。我們介紹了使用NumPy陣列的基本知識,包括建立陣列、訪問元素、操作其形狀、執行數學運算和比較陣列。

更新於:2023年8月14日

瀏覽量:163

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.