
- 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 中,可以使用 numpy.matrix() 函式或透過將現有陣列轉換為矩陣來建立矩陣。本教程將介紹建立矩陣的不同方法。
使用 numpy.matrix() 函式
numpy.matrix() 函式用於從字串表示或現有資料結構建立矩陣。此函式最適合快速建立小型矩陣。
示例
在下面的示例中,我們從字串表示和現有陣列建立矩陣。np.matrix() 函式將字串解釋為 2x2 矩陣,陣列直接轉換為矩陣格式:
import numpy as np # Creating a matrix from a string matrix_str = np.matrix('1 2; 3 4') print("Matrix from string:\n", matrix_str) # Creating a matrix from an array array_data = np.array([[1, 2], [3, 4]]) matrix_from_array = np.matrix(array_data) print("Matrix from array:\n", matrix_from_array)
以下是獲得的輸出:
Matrix from string: [[1 2] [3 4]] Matrix from array: [[1 2] [3 4]]
使用 numpy.array() 函式
您可以使用 numpy.asmatrix() 函式將 NumPy 陣列轉換為矩陣。當您擁有以陣列形式存在的現有資料並希望對其執行矩陣運算時,這非常有用。
示例
在下面的示例中,我們建立一個數組,然後使用 np.asmatrix() 函式將其轉換為矩陣:
import numpy as np # Creating an array array_data = np.array([[5, 6], [7, 8]]) # Converting array to matrix matrix_data = np.asmatrix(array_data) print("Converted Matrix:\n", matrix_data)
這將產生以下結果:
Converted Matrix: [[5 6] [7 8]]
NumPy 中的矩陣運算
建立矩陣後,您可以執行各種矩陣運算,例如加法、乘法、轉置、求逆等等。
矩陣加法
新增兩個矩陣包括新增對應的元素。如果兩個矩陣具有相同的形狀,則可以逐元素地將它們相加。
示例
在此示例中,“matrix_1”和“matrix_2”逐元素相加,這意味著“matrix_1”的每個元素都加到“matrix_2”中對應的元素:
import numpy as np # Add two matrices matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) result = matrix_1 + matrix_2 print(result)
以下是上述程式碼的輸出:
[[ 6 8] [10 12]]
矩陣乘法
我們可以使用以下方法執行矩陣乘法:
- 使用 * 運算子
- 使用 @ 運算子 (Python 3.5+)
- 使用 np.dot() 函式
- 使用 numpy.matmul() 函式
與逐元素乘法不同,矩陣乘法遵循線性代數規則。
示例
在此示例中,我們使用以上所有方法乘以兩個矩陣:
import numpy as np matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # Matrix multiplication using * matrix_product1 = matrix_1 * matrix_2 print("Matrix Multiplication (*):\n", matrix_product1) # Matrix multiplication using @ matrix_product2 = matrix_1 @ matrix_2 print("Matrix Multiplication (@):\n", matrix_product2) # Matrix multiplication using np.dot() matrix_product3 = np.dot(matrix_1, matrix_2) print("Matrix Multiplication (np.dot()):\n", matrix_product3) # Matrix multiplication using np.matmul() matrix_product4 = np.matmul(matrix_1, matrix_2) print("Matrix Multiplication (np.matmul()):\n", matrix_product4)
獲得的輸出如下所示:
Matrix Multiplication (*): [[ 5 12] [21 32]] Matrix Multiplication (@): [[19 22] [43 50]] Matrix Multiplication (np.dot()): [[19 22] [43 50]] Matrix Multiplication (np.matmul()): [[19 22] [43 50]]
矩陣求逆
矩陣求逆是一個尋找矩陣的操作,當它與原始矩陣相乘時,會產生單位矩陣。可以使用 np.linalg.inv() 函式計算矩陣的逆。
但是,並非所有矩陣都是可逆的。矩陣必須是方陣並且具有非零行列式才能可逆。
示例
在下面的示例中,我們使用 np.linalg.inv() 函式反轉一個 2x2 矩陣。輸出是一個新矩陣,當它與原始矩陣相乘時,結果是單位矩陣:
import numpy as np matrix = np.array([[1, 2], [3, 4]]) inverse_matrix = np.linalg.inv(matrix) print(inverse_matrix)
執行上述程式碼後,我們得到以下輸出:
[[-2. 1. ] [ 1.5 -0.5]]
矩陣轉置
矩陣轉置包括將其翻轉到其對角線,交換行和列索引。我們可以使用 .T 屬性在 NumPy 中轉置矩陣。
示例
在下面的示例中,我們使用“.T”屬性轉置一個 2x2 矩陣:
import numpy as np # Transpose of a matrix matrix = np.array([[1, 2], [3, 4]]) transposed = matrix.T print(transposed)
產生的結果如下:
[[1 3] [2 4]]
矩陣行列式
矩陣的行列式是一個標量值,可以使用 np.linalg.det() 函式計算。它提供有關矩陣屬性的資訊,例如它是否可逆。
非零行列式表示矩陣可逆,而行列式為零表示矩陣是奇異的。
示例
在此示例中,np.linalg.det() 函式計算給定矩陣的行列式:
import numpy as np # Compute the determinant matrix = np.array([[1, 2], [3, 4]]) det = np.linalg.det(matrix) print("Determinant:", det)
我們得到如下所示的輸出:
Determinant: -2.0000000000000004
特徵值和特徵向量
numpy.linalg.eig() 函式用於計算方陣的特徵值和右特徵向量。特徵值表示向量的幅度,而特徵向量提供方向。
特徵值和特徵向量是線性代數中的基本概念,在許多領域都很重要,例如主成分分析 (PCA) 和求解微分方程。
示例
在此示例中,np.linalg.eig() 函式計算矩陣的特徵值和特徵向量。特徵值表示沿每個特徵向量方向縮放的幅度:
import numpy as np # Compute eigenvalues and eigenvectors matrix = np.array([[4, -2], [1, 1]]) eigvals, eigvecs = np.linalg.eig(matrix) print("Eigenvalues:", eigvals) print("Eigenvectors:", eigvecs)
以下是獲得的輸出:
Eigenvalues: [3. 2.] Eigenvectors: [[0.89442719 0.70710678] [0.4472136 0.70710678]]
奇異值分解 (SVD)
SVD 是一種矩陣分解方法,它將方陣的特徵分解推廣到任何 m x n 矩陣。我們可以在 NumPy 中使用 numpy.linalg.svd() 函式實現這一點。
特徵分解是將矩陣分解為其特徵值和特徵向量的過程。這些特徵值表示縮放因子,而特徵向量顯示矩陣拉伸或壓縮的方向。
示例
在下面的示例中,我們使用 np.linalg.svd() 函式對“2x2”矩陣執行奇異值分解。結果包括 U 矩陣、奇異值和 V 矩陣,它們共同表示原始矩陣:
import numpy as np matrix_a = np.matrix('1 2; 3 4') # Performing SVD U, S, V = np.linalg.svd(matrix_a) print("U Matrix:\n", U) print("Singular Values:\n", S) print("V Matrix:\n", V)
這將產生以下結果:
U Matrix: [[-0.40455358 -0.9145143 ] [-0.9145143 0.40455358]] Singular Values: [5.4649857 0.36596619] V Matrix: [[-0.57604844 -0.81741556] [ 0.81741556 -0.57604844]]