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 對應於 1False 對應於 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)

其中,ab是要進行矩陣乘法的兩個陣列,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,其中Amy_arr2bmy_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)

練習題

  1. 解釋 NumPy 中所有的陣列操作函式,並提供 Python 程式碼示例。
  2. 解釋如何使用 Python 程式碼將多個陣列合併為一個單一的陣列。
  3. 解釋 NumPy 中的陣列分割,並提供 Python 程式碼示例。
  4. 解釋 NumPy 中的陣列排序,並提供 Python 程式碼示例。
  5. 解釋 NumPy 中的元素搜尋,並提供 Python 程式碼示例。
  6. 解釋如何使用 Python 程式碼將元素插入到 NumPy 陣列中。
  7. 解釋如何使用 Python 程式碼從 NumPy 陣列中刪除元素。
  8. 解釋使用 dot 函式進行矩陣乘法,並提供 Python 程式碼示例。
  9. 解釋 NumPy 中的線性代數模組 (linalg),並提供 Python 程式碼示例。

透過這些練習題,你可以更深入地瞭解 NumPy 的功能和應用,並提高你的數值運算技能。

從底層實作到高階應用的全面檢視顯示,NumPy 提供了豐富的陣列操作功能,涵蓋了條件篩選、插入、刪除、合併、分割、排序、搜尋、矩陣運算以及線性代數等方面。where 函式和布林索引提供了靈活的條件篩選機制;insertappend 函式可以向陣列中插入元素;delete 函式則可以刪除指定元素;concatenatestackvstackhstack 函式實作了陣列的合併;splitarray_split 函式用於分割陣列;sortargsort 函式提供了排序功能;where 函式也可用於搜尋元素;dot 函式和 linalg 模組則支援矩陣運算和線性代數解法。透過多維度效能指標的實測分析,這些功能在資料科學、機器學習和科學計算等領域中展現出極高的效率和靈活性。技術團隊應著重於理解不同函式的特性和應用場景,才能釋放 NumPy 的完整潛力。接下來的 2-3 年,隨著 Python 生態系統的持續發展,我們預見 NumPy 的應用將更加廣泛,並在更多領域扮演關鍵角色。