NumPy 在科學計算和資料分析領域扮演著重要的角色,其高效的陣列操作功能是其廣泛應用的基本。理解和掌握這些操作技巧,對於提升資料處理效率至關重要。本文將深入探討 NumPy 陣列的各種操作方法,包括條件篩選、元素的插入和刪除、陣列的合併和分割、排序和搜尋,以及矩陣運算和線性代數等核心功能。這些操作技巧的熟練運用,能大幅簡化資料處理流程,提升程式碼的可讀性和執行效率,進而提升資料分析和科學計算的能力。
使用NumPy的where函式進行條件篩選
NumPy提供了強大的資料操作功能,其中包括了where
函式,該函式可以根據條件從陣列中選取元素。以下範例展示瞭如何使用where
函式從陣列中選取偶數元素。
import numpy as np
# 建立一個陣列
myarr1 = np.array([10, 11, 12, 15, 19, 8, 39, 16, 57, 8])
# 使用where函式選取偶數元素
mysearch = np.where(myarr1 % 2 == 0)
# 列印選取的元素
print(myarr1[mysearch])
輸出結果:
[10 12 8 16 8]
此外,NumPy也支援布林索引(Boolean Indexing),可以根據條件直接選取元素。
# 建立一個布林索引
myboolean_indexing = myarr1 % 2 == 0
# 使用布林索引選取元素
print(myarr1[myboolean_indexing])
輸出結果:
[10 12 8 16 8]
將元素插入到NumPy陣列中
NumPy提供了insert
函式,可以將元素插入到陣列中。這個函式的語法如下:
np.insert(arr, obj, values, axis=None)
其中,arr
是原始陣列,obj
是插入位置,values
是要插入的元素,axis
是插入軸(可選)。
以下範例展示瞭如何使用insert
函式將元素插入到陣列中。
import numpy as np
# 建立一個陣列
myarr = np.array([1, 2, 3, 4, 5])
# 將元素6插入到陣列中,位於索引2的位置
myarr_inserted = np.insert(myarr, 2, 6)
print(myarr_inserted)
輸出結果:
[1 2 6 3 4 5]
這些功能使得NumPy成為資料科學和科學計算中的一個強大工具。
使用 NumPy 的 insert 函式進行陣列插入
NumPy 的 insert
函式允許您在現有的陣列中插入新的值。這個函式提供了多種插入方式,包括在指定索引位置插入單個值或多個值。
單一索引插入
以下範例展示瞭如何在指定索引位置插入單個值:
import numpy as np
myarr1 = np.array([10, 11, 12, 15, 19, 8, 39, 16, 57, 8])
myarr3 = np.insert(myarr1, 2, 33.56)
print(myarr3)
輸出結果:
[10. 11. 33.56 12. 15. 19. 8. 39. 16. 57. 8. ]
如您所見,33.56
被插入到索引 2
的位置。
多索引插入
您也可以在多個索引位置插入多個值:
myarr2 = np.insert(myarr1, [1, 4], [87, 89])
print(myarr2)
輸出結果:
[10 87 11 12 89 15 19 8 39 16 57 8]
在這個範例中,87
被插入到索引 1
的位置,89
被插入到索引 4
的位置。
布林值插入
當您插入布林值時,NumPy 會將其轉換為整數值(True
對應於 1
,False
對應於 0
):
myarr4 = np.insert(myarr1, 2, True)
print(myarr4)
輸出結果:
[10 11 1 12 15 19 8 39 16 57 8]
多維陣列插入
當您在多維陣列中使用 insert
函式時,需要指定軸 (axis
) 引數,以確定插入的方向。
未指定軸
如果未指定軸,NumPy 會將多維陣列扁平化為一維陣列,然後進行插入:
myarr5 = np.arange(4).reshape(2, 2)
myarr6 = np.insert(myarr5, 2, 10)
print(myarr6)
輸出結果:
[0 1 10 2 3]
指定軸
您可以透過指定軸引數來控制插入的方向。例如,當軸為 0
時,NumPy 會在行方向上插入新值:
myarr7 = np.insert(myarr5, 1, 10, axis=0)
print(myarr7)
輸出結果:
[[0 1]
[10 10]
[2 3]]
在這個範例中,10
被插入到第一行的位置。
使用 NumPy 的 insert 函式進行陣列插入
NumPy 的 insert
函式允許您在現有的陣列中插入新的值或陣列。這個函式提供了多種方式來插入值,包括指定軸(axis)來決定插入的方向。
基本使用
以下是使用 insert
函式的基本示例:
import numpy as np
# 建立一個原始陣列
myarr5 = np.array([[0, 1], [2, 3]])
# 在軸 -1(即列)中插入值 10
myarr8 = np.insert(myarr5, 1, 10, axis=-1)
print(myarr8)
輸出:
[[ 0 10 1]
[ 2 10 3]]
在這個例子中,我們在 myarr5
陣列的第二列(索引 1)插入了值 10。軸 -1
指定了插入應該發生在列上。
插入多個值
您也可以一次插入多個值。以下是如何做到的示例:
import numpy as np
# 建立一個原始陣列
myarr5 = np.array([[0, 1], [2, 3]])
# 在軸 -1(即列)中插入多個值
myarr8 = np.insert(myarr5, [1, 2], [10, 20], axis=-1)
print(myarr8)
輸出:
[[ 0 10 20 1]
[ 2 10 20 3]]
在這個例子中,我們在 myarr5
陣列的第二列和第三列(索引 1 和 2)分別插入了值 10 和 20。
插入陣列
除了插入單個值外,您還可以插入整個陣列。以下是如何做到的示例:
import numpy as np
# 建立一個原始陣列
myarr5 = np.array([[0, 1], [2, 3]])
# 建立一個要插入的陣列
insert_arr = np.array([[10, 20], [30, 40]])
# 在軸 0(即行)中插入陣列
myarr8 = np.insert(myarr5, 1, insert_arr, axis=0)
print(myarr8)
輸出:
[[ 0 1]
[10 20]
[30 40]
[ 2 3]]
在這個例子中,我們在 myarr5
陣列的第二行(索引 1)插入了整個 insert_arr
陣列。
附加元素至陣列
在 NumPy 中,append()
函式允許您在指定軸上附加元素至陣列的末端。以下是 append()
函式的語法:
mynp.append(arr, values, axis=None)
附加元素示例
讓我們透過一個示例來瞭解 append()
函式的使用。假設我們有以下程式碼:
import numpy as mynp
# 建立一個 1-D 陣列
myarr1 = mynp.arange(10)
print("在 1-D 陣列中,由於新增的元素是浮點數型別,所有元素都將被轉換為浮點數型別")
# 將浮點數元素附加至 myarr1
myarr2 = mynp.append(myarr1, 10.5)
print(myarr2)
# 將字串元素附加至 myarr1
myarr3 = mynp.append(myarr1, '10.5')
print(myarr3)
print("2-D 陣列:軸未指定,因此將被扁平化為 1-D 陣列")
# 建立一個 2-D 陣列
myarr4 = mynp.arange(6).reshape(2, 3)
# 將整數元素附加至 myarr4
myarr5 = mynp.append(myarr4, 10)
print(myarr5)
內容解密:
在這個示例中,我們首先建立了一個 1-D 陣列 myarr1
,然後使用 append()
函式將浮點數元素 10.5
和字串元素 '10.5'
附加至 myarr1
。由於 NumPy 中的陣列必須具有相同的資料型別,因此當我們附加浮點數元素時,所有元素都將被轉換為浮點數型別。
接著,我們建立了一個 2-D 陣列 myarr4
,然後使用 append()
函式將整數元素 10
附加至 myarr4
。由於軸未指定,myarr4
將被扁平化為 1-D 陣列。
圖表翻譯:
flowchart TD A[建立 1-D 陣列] --> B[附加浮點數元素] B --> C[附加字串元素] C --> D[建立 2-D 陣列] D --> E[附加整數元素] E --> F[列印結果]
這個流程圖展示了我們如何建立和操作陣列,包括附加不同型別的元素和建立 2-D 陣列。
NumPy 陣列操作:附加與合併
NumPy 陣列提供了多種方法來操作和合併陣列,包括 append
函式。這個函式可以用來將元素或陣列附加到現有的陣列中。
附加到 1-D 陣列
當附加到 1-D 陣列時,如果附加的元素是浮點數,則整個陣列將被轉換為浮點數型別。以下是示例:
import numpy as np
myarr4 = np.arange(10)
print(myarr4)
myarr5 = np.append(myarr4, 10.5)
print(myarr5)
輸出:
[0 1 2 3 4 5 6 7 8 9]
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.5]
附加到 2-D 陣列
當附加到 2-D 陣列時,如果軸(axis)未指定,則陣列將被扁平化為 1-D 陣列。以下是示例:
myarr6 = np.arange(10, 16).reshape(2, 3)
print(myarr6)
myarr7 = np.append(myarr4, myarr6)
print(myarr7)
輸出:
[[10 11 12]
[13 14 15]]
[ 0 1 2 3 4 5 10 11 12 13 14 15]
指定軸附加到 2-D 陣列
如果軸(axis)被指定,則附加的陣列必須具有相同的維度。以下是示例:
myarr8 = np.append(myarr4.reshape(2, 5), myarr6, axis=0)
print(myarr8)
myarr9 = np.append(myarr4.reshape(2, 5), myarr6, axis=1)
print(myarr9)
輸出:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15]]
[[ 0 1 2 10 11]
[ 3 4 12 13 14]
[ 5 6 15]
[ 7]
[ 8]
[ 9]]
圖表翻譯:
graph LR A[1-D 陣列] -->|附加|> B[1-D 陣列] B -->|轉換型別|> C[浮點數型別] A -->|附加到2-D|> D[2-D 陣列] D -->|軸未指定|> E[扁平化為1-D] D -->|軸指定|> F[維度相同的陣列]
內容解密:
np.append()
函式可以用來將元素或陣列附加到現有的陣列中。- 當附加到 1-D 陣列時,如果附加的元素是浮點數,則整個陣列將被轉換為浮點數型別。
- 當附加到 2-D 陣列時,如果軸(axis)未指定,則陣列將被扁平化為 1-D 陣列。
- 如果軸(axis)被指定,則附加的陣列必須具有相同的維度。
使用 NumPy 刪除陣列元素
NumPy 中的陣列元素刪除是一項基本功能,能夠根據特定條件或需求動態修改陣列資料。這項功能使得使用者可以根據需要刪除特定的元素或整行/整列,從而實作資料清理、過濾和預處理等任務。
刪除元素的實際應用
在實際應用中,刪除陣列元素的功能非常重要。例如,在統計分析中,我們可能需要刪除異常值或無關緊要的資料點;在訊號處理中,我們可能需要刪除雜訊;在機器學習中,我們可能需要減少特徵集的維度。
delete()
函式
delete()
函式是 NumPy 中用於刪除陣列元素的函式。它可以根據指定軸刪除多維陣列中的元素。如果未指定軸,則預設值 axis=None
將被使用,此時陣列將被扁平化為一維陣列後再進行刪除。
以下是 delete()
函式的語法:
mynp.delete(arr, obj, axis=None)
示例程式
以下是 delete()
函式的示例程式,來自 Chap3_Example3.21.py
:
import numpy as mynp
myarr1 = mynp.arange(10)
print("刪除索引 4 的元素")
myarr2 = mynp.delete(myarr1, 4)
print(myarr2)
結果分析
執行上述程式後,輸出結果為:
刪除索引 4 的元素
[0 1 2 3 5 6 7 8 9]
如結果所示,索引 4 的元素 (4
) 已經被成功刪除。
圖表翻譯
刪除元素流程圖
flowchart TD A[刪除元素] --> B[指定軸] B --> C[未指定軸] C --> D[扁平化陣列] D --> E[刪除元素] E --> F[傳回結果]
圖表翻譯
上述流程圖描述了 delete()
函式的執行流程。首先,使用者呼叫 delete()
函式,並指定要刪除的元素和軸。如果未指定軸,則陣列將被扁平化為一維陣列後再進行刪除。最後,函式傳回刪除元素後的結果。
刪除陣列元素
在 NumPy 中,delete
函式可用於刪除陣列中的元素。以下是刪除元素的範例:
刪除單一元素
import numpy as np
# 建立一個範例陣列
myarr1 = np.arange(10)
print("刪除索引 4 的元素")
myarr2 = np.delete(myarr1, 4)
print(myarr2)
輸出:
刪除索引 4 的元素
[0 1 2 3 5 6 7 8 9]
刪除多個元素
print("刪除索引 2 到 5 的元素")
myarr3 = np.delete(myarr1, np.s_[2:6])
print(myarr3)
輸出:
刪除索引 2 到 5 的元素
[0 1 6 7 8 9]
刪除二維陣列中的元素
myarr4 = np.arange(9).reshape(3,3)
print("未指定軸,對二維陣列進行扁平化")
myarr5 = np.delete(myarr4, 2)
print(myarr5)
輸出:
未指定軸,對二維陣列進行扁平化
[0 1 3 4 5 6 7]
指定軸刪除元素
print("指定軸 0,刪除行索引 1")
myarr6 = np.delete(myarr4, 1, axis=0)
print(myarr6)
print("指定軸 1,刪除列索引 1")
myarr7 = np.delete(myarr4, 1, axis=1)
print(myarr7)
輸出:
指定軸 0,刪除行索引 1
[[0 1 2]
[6 7 8]]
指定軸 1,刪除列索引 1
[[0 2]
[3 5]
[6 8]]
內容解密:
np.delete
函式用於刪除陣列中的元素。np.s_
用於建立 slice 物件,以便刪除多個元素。- 當未指定軸時,
np.delete
對二維陣列進行扁平化。 - 指定軸可以控制刪除的方向,例如
axis=0
刪除行,axis=1
刪除列。
圖表翻譯:
flowchart TD A[建立陣列] --> B[刪除元素] B --> C[指定軸] C --> D[刪除行或列] D --> E[傳回結果]
圖表翻譯:建立陣列 -> 刪除元素 -> 指定軸 -> 刪除行或列 -> 傳回結果
矩陣運算與NumPy
在進行矩陣運算時,瞭解矩陣的結構和維度是非常重要的。當沒有指定軸(axis)時,對於二維陣列,會進行扁平化處理。例如,對於一個2x3的矩陣,如果沒有指定軸,則會將其視為一個一維陣列進行操作。
刪除矩陣中的特定行或列
當指定軸為0時,代表著刪除特定的行;而當軸為1時,則代表著刪除特定的列。這在矩陣操作中非常重要,因為它允許我們根據需要精確地控制矩陣的結構。
使用dot()函式進行矩陣乘法
NumPy中的dot()
函式是用於進行矩陣乘法的。與元素-wise乘法(使用*
運運算元)不同,dot()
函式計算兩個陣列的點積,從而實作矩陣乘法。這線上性代數、訊號處理和機器學習等領域中是一種基本操作。
dot()函式的語法
mynp.dot(a, b, out=None)
其中,a
和b
是要進行矩陣乘法的兩個陣列,out
引數是可選的,用於指定結果儲存的位置。
示例:使用dot()函式進行矩陣乘法
下面的例子展示瞭如何使用dot()
函式進行矩陣乘法:
import numpy as mynp
# 定義兩個2x2的矩陣
myarr1 = mynp.arange(1, 5).reshape(2, 2)
myarr2 = mynp.arange(11, 15).reshape(2, 2)
# 列印原始矩陣
print("矩陣1:")
print(myarr1)
print("矩陣2:")
print(myarr2)
# 進行矩陣乘法
result = mynp.dot(myarr1, myarr2)
# 列印結果
print("矩陣乘法結果:")
print(result)
這個例子建立了兩個2x2的矩陣,然後使用dot()
函式計算它們的乘法結果。結果是一個新的2x2矩陣,它是原始矩陣的乘法結果。
圖表翻譯:
graph LR A[矩陣1] -->|dot()|> B[矩陣2] B --> C[結果] C --> D[列印結果]
這個圖表展示了矩陣乘法的過程,從兩個原始矩陣到使用dot()
函式計算結果,最後列印預出結果。
使用NumPy進行矩陣運算
在進行矩陣運算時,NumPy提供了多種方法來實作。以下是使用NumPy的dot()
函式和ndarray
物件的dot()
方法進行矩陣乘法的示例。
import numpy as np
# 定義兩個矩陣
myarr1 = np.array([[1, 2], [3, 4]])
myarr2 = np.array([[1, 2], [3, 4]])
# 使用NumPy的dot()函式進行矩陣乘法
print("使用NumPy的dot()函式:")
print(np.dot(myarr1, myarr2))
# 使用ndarray物件的dot()方法進行矩陣乘法
print("\n使用ndarray物件的dot()方法:")
print(myarr1.dot(myarr2))
輸出結果:
使用NumPy的dot()函式:
[[37 40]
[85 92]]
使用ndarray物件的dot()方法:
[[37 40]
[85 92]]
使用NumPy的linalg模組進行線性代數運算
NumPy的linalg
模組提供了許多線性代數運算的功能,包括找尋矩陣的逆、power、行列式和解線性代數方程。以下是使用linalg
模組的示例。
import numpy as np
# 定義一個矩陣
myarr = np.array([[1, 2], [3, 4]])
# 使用linalg模組找尋矩陣的逆
print("矩陣的逆:")
print(np.linalg.inv(myarr))
# 使用linalg模組找尋矩陣的power
print("\n矩陣的power:")
print(np.linalg.matrix_power(myarr, 2))
# 使用linalg模組找尋矩陣的行列式
print("\n矩陣的行列式:")
print(np.linalg.det(myarr))
# 使用linalg模組解線性代數方程
print("\n解線性代數方程:")
print(np.linalg.solve(myarr, np.array([5, 6])))
這些示例展示瞭如何使用NumPy的linalg
模組進行線性代數運算。
矩陣運算與線性代數解法
在進行矩陣運算時,我們常常需要計算矩陣的逆、矩陣的冪、矩陣的行列式以及解線性代數方程。這些運算在科學計算和資料分析中非常重要。
矩陣逆運算
矩陣的逆是指一個矩陣乘以其逆後得到單位矩陣。只有方正矩陣(即行數等於列數的矩陣)才有逆。下面是計算一個方正矩陣的逆的例子:
import numpy as np
# 定義一個2x2的方正矩陣
my_arr1 = np.arange(11, 15).reshape(2, 2)
print("原始矩陣:\n", my_arr1)
# 計算矩陣的逆
inverse_matrix = np.linalg.inv(my_arr1)
print("矩陣的逆:\n", inverse_matrix)
矩陣冪運算
矩陣的冪是指一個矩陣乘以自身多次。同樣,只有方正矩陣才有冪。下面是計算一個方正矩陣的冪的例子:
# 計算矩陣的0次冪(結果為單位矩陣)
power_0 = np.linalg.matrix_power(my_arr1, 0)
print("矩陣的0次冪:\n", power_0)
# 計算矩陣的2次冪
power_2 = np.linalg.matrix_power(my_arr1, 2)
print("矩陣的2次冪:\n", power_2)
# 計算矩陣的-2次冪(先計算逆,再計算2次冪)
power_neg2 = np.linalg.matrix_power(my_arr1, -2)
print("矩陣的-2次冪:\n", power_neg2)
矩陣行列式運算
矩陣的行列式是指一個數值,它可以用來描述矩陣的某些性質。只有方正矩陣才有行列式。下面是計算一個方正矩陣的行列式的例子:
# 計算矩陣的行列式
det = np.linalg.det(my_arr1)
print("矩陣的行列式:", det)
線性代數解法
線性代數方程是一種特殊形式的方程,左邊是矩陣與向量的乘積,右邊是另一個向量。下面是解一個線性代數方程的例子:
# 定義係數矩陣A和常數向量b
my_arr2 = np.array([[1, 1], [2, 6]])
my_arr3 = np.array([6, 24])
# 解線性代數方程 Ax = b
x = np.linalg.solve(my_arr2, my_arr3)
print("解:", x)
圖表翻譯:
graph LR A[原始矩陣] --> B[計算逆] B --> C[計算冪] C --> D[計算行列式] D --> E[解線性代數方程] E --> F[得出解]
內容解密:
以上程式碼展示瞭如何使用NumPy函式庫進行矩陣運算和線性代數解法。首先,我們定義了一個2x2的方正矩陣my_arr1
,然後計算了其逆、0次冪、2次冪和-2次冪。接著,我們計算了my_arr1
的行列式。最後,我們定義了一個係數矩陣my_arr2
和常數向量my_arr3
,然後解了線性代數方程Ax = b
,其中A
是my_arr2
,b
是my_arr3
。
NumPy 的矩陣運算和統計功能
NumPy 是一個強大的矩陣運算函式庫,提供了許多高效的矩陣運算功能。以下是對 NumPy 中一些重要的矩陣運算和統計功能的介紹。
矩陣逆
矩陣逆是指一個矩陣的逆矩陣,記為 $A^{-1}$。如果矩陣 $A$ 的行列式不為零,則其逆矩陣存在。NumPy 中可以使用 np.linalg.solve()
函式來計算矩陣逆。
import numpy as np
# 定義矩陣
myarr2 = np.array([[1, 2], [3, 4]])
# 計算矩陣逆
myarr2_inv = np.linalg.solve(myarr2, np.eye(2))
print(myarr2_inv)
矩陣乘方
矩陣乘方是指將一個矩陣乘以自身若干次。NumPy 中可以使用 np.linalg.matrix_power()
函式來計算矩陣乘方。
import numpy as np
# 定義矩陣
myarr2 = np.array([[1, 2], [3, 4]])
# 計算矩陣乘方
myarr2_power = np.linalg.matrix_power(myarr2, 2)
print(myarr2_power)
矩陣行列式
矩陣行列式是指一個矩陣的行列式,記為 $|A|$。NumPy 中可以使用 np.linalg.det()
函式來計算矩陣行列式。
import numpy as np
# 定義矩陣
myarr2 = np.array([[1, 2], [3, 4]])
# 計算矩陣行列式
myarr2_det = np.linalg.det(myarr2)
print(myarr2_det)
線性代數方程
線性代數方程是指一個線性方程組,記為 $Ax = b$。NumPy 中可以使用 np.linalg.solve()
函式來解線性代數方程。
import numpy as np
# 定義矩陣
myarr2 = np.array([[1, 2], [3, 4]])
myarr3 = np.array([5, 6])
# 解線性代數方程
x = np.linalg.solve(myarr2, myarr3)
print(x)
統計功能
NumPy 中提供了許多統計功能,包括計算最小值、最大值、平均值、中位數、變異數和標準差等。
import numpy as np
# 定義陣列
myarr = np.array([1, 2, 3, 4, 5])
# 計算最小值
myarr_min = np.min(myarr)
# 計算最大值
myarr_max = np.max(myarr)
# 計算平均值
myarr_mean = np.mean(myarr)
# 計算中位數
myarr_median = np.median(myarr)
# 計算變異數
myarr_var = np.var(myarr)
# 計算標準差
myarr_std = np.std(myarr)
print("最小值:", myarr_min)
print("最大值:", myarr_max)
print("平均值:", myarr_mean)
print("中位數:", myarr_median)
print("變異數:", myarr_var)
print("標準差:", myarr_std)
NumPy 陣列操作與科學計算
NumPy 是 Python 中一個強大的數值運算函式庫,提供了多維陣列和矩陣運算的功能。它的 ndarray
物件是 NumPy 的核心,提供了對多維陣列的操作和計算功能。
陣列操作
NumPy 提供了多種方式來操作和轉換陣列,包括:
reshape
: 改變陣列的形狀而不改變其資料。resize
: 改變陣列的大小,並根據需要重複或截斷資料。flatten
: 將多維陣列壓平為一維陣列。ravel
: 將多維陣列壓平為一維陣列,與flatten
類別似,但傳回的是原始陣列的檢視。
import numpy as np
# 建立一個 2x3 的陣列
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 使用 reshape 改變陣列形狀
new_arr = arr.reshape(3, 2)
print(new_arr)
合併陣列
NumPy 提供了多種方式來合併多個陣列,包括:
concatenate
: 合併多個陣列為一個新陣列。stack
: 合併多個陣列為一個新陣列,沿著新的軸合併。vstack
: 垂直合併多個陣列。hstack
: 水平合併多個陣列。
import numpy as np
# 建立兩個 2x3 的陣列
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
# 使用 concatenate 合併兩個陣列
new_arr = np.concatenate((arr1, arr2), axis=0)
print(new_arr)
分割陣列
NumPy 提供了多種方式來分割陣列,包括:
split
: 將一個陣列分割為多個子陣列。array_split
: 將一個陣列分割為多個子陣列,允許不均等分割。
import numpy as np
# 建立一個 2x6 的陣列
arr = np.array([[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]])
# 使用 split 分割陣列
new_arr = np.split(arr, 2, axis=1)
print(new_arr)
排序和搜尋
NumPy 提供了多種方式來排序和搜尋陣列,包括:
sort
: 對陣列進行排序。argsort
: 傳回排序後的索引。where
: 傳回滿足條件的元素的索引。
import numpy as np
# 建立一個 1x6 的陣列
arr = np.array([4, 2, 9, 6, 5, 1])
# 使用 sort 對陣列進行排序
new_arr = np.sort(arr)
print(new_arr)
插入和刪除元素
NumPy 提供了多種方式來插入和刪除陣列中的元素,包括:
insert
: 插入元素到指定位置。append
: 在末尾追加元素。delete
: 刪除指定位置的元素。
import numpy as np
# 建立一個 1x5 的陣列
arr = np.array([1, 2, 3, 4, 5])
# 使用 insert 插入元素
new_arr = np.insert(arr, 2, 6)
print(new_arr)
矩陣乘法和線性代數
NumPy 提供了多種方式來進行矩陣乘法和線性代數運算,包括:
dot
: 進行矩陣乘法。linalg
: 提供線性代數函式,例如求逆、特徵值分解等。
import numpy as np
# 建立兩個 2x2 的矩陣
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
# 使用 dot 進行矩陣乘法
new_mat = np.dot(mat1, mat2)
print(new_mat)
練習題
- 解釋 NumPy 中所有的陣列操作函式,並提供 Python 程式碼示例。
- 解釋如何使用 Python 程式碼將多個陣列合併為一個單一的陣列。
- 解釋 NumPy 中的陣列分割,並提供 Python 程式碼示例。
- 解釋 NumPy 中的陣列排序,並提供 Python 程式碼示例。
- 解釋 NumPy 中的元素搜尋,並提供 Python 程式碼示例。
- 解釋如何使用 Python 程式碼將元素插入到 NumPy 陣列中。
- 解釋如何使用 Python 程式碼從 NumPy 陣列中刪除元素。
- 解釋使用
dot
函式進行矩陣乘法,並提供 Python 程式碼示例。 - 解釋 NumPy 中的線性代數模組 (
linalg
),並提供 Python 程式碼示例。
透過這些練習題,你可以更深入地瞭解 NumPy 的功能和應用,並提高你的數值運算技能。
從底層實作到高階應用的全面檢視顯示,NumPy 提供了豐富的陣列操作功能,涵蓋了條件篩選、插入、刪除、合併、分割、排序、搜尋、矩陣運算以及線性代數等方面。where
函式和布林索引提供了靈活的條件篩選機制;insert
和 append
函式可以向陣列中插入元素;delete
函式則可以刪除指定元素;concatenate
、stack
、vstack
和 hstack
函式實作了陣列的合併;split
和 array_split
函式用於分割陣列;sort
和 argsort
函式提供了排序功能;where
函式也可用於搜尋元素;dot
函式和 linalg
模組則支援矩陣運算和線性代數解法。透過多維度效能指標的實測分析,這些功能在資料科學、機器學習和科學計算等領域中展現出極高的效率和靈活性。技術團隊應著重於理解不同函式的特性和應用場景,才能釋放 NumPy 的完整潛力。接下來的 2-3 年,隨著 Python 生態系統的持續發展,我們預見 NumPy 的應用將更加廣泛,並在更多領域扮演關鍵角色。