- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 建立和運算元組
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 迭代陣列
- NumPy - 重塑陣列
- NumPy - 連線陣列
- NumPy - 堆疊陣列
- NumPy - 分割陣列
- NumPy - 展平陣列
- NumPy - 轉置陣列
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和運算
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步幅
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列運算
- NumPy - 交換陣列軸
- NumPy - 位元組交換
- NumPy - 副本和檢視
- NumPy - 元素級陣列比較
- NumPy - 過濾陣列
- NumPy - 連線陣列
- NumPy - 排序、搜尋和計數函式
- NumPy - 搜尋陣列
- NumPy - 陣列的並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O
- NumPy 排序和高階操作
- NumPy - 排序陣列
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 將值追加到陣列
- NumPy - 交換陣列的列
- NumPy - 向陣列插入軸
- NumPy 處理缺失資料
- NumPy - 處理缺失資料
- NumPy - 識別缺失值
- NumPy - 刪除缺失資料
- NumPy - 填充缺失資料
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合運算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
NumPy - 線性代數
NumPy 中的線性代數
線性代數是數學的一個分支,它處理向量、矩陣和線性變換。
NumPy 包含 **numpy.linalg** 模組,該模組提供了線性代數所需的所有功能。下表描述了此模組中的一些重要函式。
| 序號 | 函式和描述 |
|---|---|
| 1 | dot
兩個陣列的點積 |
| 2 | vdot
兩個向量的點積 |
| 3 | inner
兩個陣列的內積 |
| 4 | matmul
兩個陣列的矩陣積 |
| 5 | determinant
計算陣列的行列式 |
| 6 | solve
求解線性矩陣方程 |
| 7 | inv
查詢矩陣的乘法逆矩陣 |
建立矩陣
在 NumPy 中,我們可以使用陣列建立矩陣。矩陣只是二維陣列,可以使用 np.array() 函式建立。您可以將矩陣的元素指定為巢狀列表。
示例
以下是一個基本示例,其中我們建立了一個包含兩行三列的矩陣:
import numpy as np
# Creating a 2x3 matrix
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print("Matrix:\n", matrix)
獲得以下輸出:
Matrix: [[1 2 3] [4 5 6]]
矩陣運算
矩陣運算線上性代數中是基礎,涉及對矩陣執行算術運算。在 NumPy 中,您可以輕鬆地執行矩陣的加法、減法、乘法和轉置。
矩陣加法和減法
矩陣加法和減法是逐元素執行的。這意味著每個矩陣中對應的元素相加或相減。這兩種運算都需要矩陣具有相同的形狀。
示例
在下面的示例中,我們使用兩個 2x2 NumPy 陣列 **A** 和 **B** 執行逐元素矩陣加法和減法:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Matrix Addition
C = A + B
print("Matrix Addition:\n", C)
# Matrix Subtraction
D = A - B
print("Matrix Subtraction:\n", D)
這將產生以下結果:
Matrix Addition: [[ 6 8] [10 12]] Matrix Subtraction: [[-4 -4] [-4 -4]]
矩陣乘法
矩陣乘法可以使用 **@** 運算子或 **np.dot()** 函式完成。與逐元素乘法不同,矩陣乘法涉及對行和列的乘積求和。
示例
這裡,我們使用 **@** 運算子和 **np.dot()** 函式對兩個 2x2 NumPy 陣列 **A** 和 **B** 執行矩陣乘法:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Matrix Multiplication
C = A @ B
print("Matrix Multiplication with @:\n", C)
D = np.dot(A, B)
print("Matrix Multiplication with np.dot():\n", D)
以下為上述程式碼的輸出:
Matrix Multiplication with @: [[19 22] [43 50]] Matrix Multiplication with np.dot(): [[19 22] [43 50]]
矩陣轉置
矩陣的轉置是透過沿其對角線翻轉獲得的,有效地將行與列交換。這可以使用 **.T** 屬性實現。
示例
在這裡,我們轉置一個 2x2 NumPy 陣列 **A** 以獲得其轉置 AT:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Transposing the matrix
A_T = A.T
print("Transpose of A:\n", A_T)
獲得的輸出如下所示:
Transpose of A: [[1 3] [2 4]]
行列式和逆矩陣
行列式指示矩陣是否可逆(非奇異)。如果矩陣的行列式非零,則該矩陣可逆。相反,如果行列式為零,則該矩陣是奇異的,不可逆。它還用於:
- 求解線性方程組。
- 更改積分中的變數。
- 計算面積和體積。
- 定義方陣的特徵多項式。
矩陣的 **逆矩陣** 是一個矩陣,當它與原始矩陣相乘時,會得到單位矩陣。
A X A-1 = A-1 = I
NumPy 提供了各種函式來計算矩陣的行列式和逆矩陣。
計算行列式
我們可以使用 **linalg.det()** 函式計算矩陣的行列式。它在內部使用 LAPACK 例程來計算行列式(透過 LU 分解)。
示例
在下面的示例中,我們使用 np.linalg.det() 函式計算 2x2 NumPy 陣列 **A** 的行列式:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Determinant of the matrix
det = np.linalg.det(A)
print("Determinant of A:", det)
執行上述程式碼後,我們得到以下輸出:
Determinant of A: -2.0000000000000004
計算逆矩陣
我們可以使用 **linalg.inv()** 函式計算矩陣的逆矩陣。
示例
這裡,我們使用 np.linalg.inv() 函式計算 2x2 NumPy 陣列 **A** 的逆矩陣:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Inverse of the matrix
A_inv = np.linalg.inv(A)
print("Inverse of A:\n", A_inv)
產生的結果如下:
Inverse of A: [[-2. 1. ] [ 1.5 -0.5]]
特徵值和特徵向量
特徵值和特徵向量對於理解線性變換至關重要。可以使用 **np.linalg.eig()** 函式計算它們。
特徵值表示變換的大小,而特徵向量表示方向。
示例
在下面所示的示例中,我們使用 np.linalg.eig() 函式計算 2x2 NumPy 陣列 **A** 的特徵值和特徵向量:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Computing eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)
我們得到如下所示的輸出:
Eigenvalues: [-0.37228132 5.37228132] Eigenvectors: [[-0.82456484 -0.41597356] [ 0.56576746 -0.90937671]]
求解線性系統
在 Numpy 中,可以使用 **np.linalg.solve()** 函式求解線性方程組。此函式查詢滿足矩陣方程表示的線性方程的變數值:
Ax = b
其中,**A** 表示矩陣,**b** 是一個向量。
示例
在這個示例中,我們正在求解由矩陣方程 **Ax=b** 表示的線性方程組,其中 **A** 是一個 2x2 矩陣,**b** 是一個向量。我們使用 np.linalg.solve() 函式計算滿足該方程的 **x** 的值:
import numpy as np
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
# Solving the linear system Ax = b
x = np.linalg.solve(A, b)
print("Solution of the linear system:", x)
獲得以下輸出:
Solution of the linear system: [2. 3.]
奇異值分解 (SVD)
SVD 是將矩陣分解為三個矩陣:**U**(左奇異向量)、**S**(奇異值)和 **V**(右奇異向量)。它在各種應用中都很有用,包括訊號處理和統計學。
您可以使用 NumPy 中的 **np.linalg.svd()** 函式執行 SVD。
示例
在下面的示例中,我們對 2x2 矩陣 **A** 執行奇異值分解 (SVD),它將其分解為三個分量:U、S 和 V:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Performing SVD
U, S, V = np.linalg.svd(A)
print("U matrix:\n", U)
print("Sigma values:", S)
print("V matrix:\n", V)
這將產生以下結果:
U matrix: [[-0.40455358 -0.9145143 ] [-0.9145143 0.40455358]] Sigma values: [5.4649857 0.36596619] V matrix: [[-0.57604844 -0.81741556] [ 0.81741556 -0.57604844]]
範數和條件數
**範數** 測量向量和矩陣的大小或長度,有助於量化其大小。**條件數** 指示矩陣的解對其輸入變化的敏感程度,表明它在數值上可以解決的程度。
計算範數
範數測量向量和矩陣的大小或長度。我們可以使用 NumPy **linalg.norm()** 函式計算不同型別的範數,例如 Frobenius 範數和歐幾里得範數。
示例
在下面的示例中,我們正在計算 2x2 矩陣 **A** 的 Frobenius 範數,它提供了其整體大小的度量,類似於向量的歐幾里得範數。
我們還計算了 3D 向量的 L2 範數(歐幾里得範數),它量化了其在空間中的長度:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Frobenius norm
norm = np.linalg.norm(A, 'fro')
print("Frobenius norm of A:", norm)
# L2 norm (Euclidean norm)
vector = np.array([1, 2, 3])
l2_norm = np.linalg.norm(vector)
print("L2 norm of vector:", l2_norm)
以下為上述程式碼的輸出:
Frobenius norm of A: 5.477225575051661 L2 norm of vector: 3.7416573867739413
計算條件數
矩陣的條件數衡量線性系統的解對資料中誤差的敏感程度。
它可以使用 NumPy **linalg.cond()** 函式計算。較高的條件數表示矩陣接近奇異,這使得準確求解線性方程組更具挑戰性。
示例
這裡,我們正在計算 2x2 矩陣 **A** 的條件數:
import numpy as np
A = np.array([[1, 2], [3, 4]])
# Condition number
cond = np.linalg.cond(A)
print("Condition number of A:", cond)
獲得的輸出如下所示:
Condition number of A: 14.933034373659268