線性代數 (numpy.linalg)#

NumPy 的線性代數函數依賴 BLAS 和 LAPACK,以提供標準線性代數演算法的高效率底層實作。這些函式庫可能由 NumPy 本身提供,使用其參考實作的 C 語言版本子集,但如果可能,最好使用高度最佳化的函式庫,這些函式庫能利用專門的處理器功能。此類函式庫的範例包括 OpenBLAS、MKL (TM) 和 ATLAS。由於這些函式庫是多執行緒且依賴處理器的,因此可能需要環境變數和外部套件(例如 threadpoolctl)來控制執行緒數量或指定處理器架構。

SciPy 函式庫也包含一個 linalg 子模組,且 SciPy 和 NumPy 子模組提供的功能有所重疊。SciPy 包含 numpy.linalg 中沒有的功能,例如與 LU 分解和 Schur 分解相關的函數、多種計算偽反矩陣的方法,以及矩陣超越函數(如矩陣對數)。在兩者中都存在的一些函數在 scipy.linalg 中具有增強的功能。例如,scipy.linalg.eig 可以接受第二個矩陣引數,以解決廣義特徵值問題。然而,NumPy 中的某些函數具有更彈性的廣播選項。例如,numpy.linalg.solve 可以處理「堆疊」陣列,而 scipy.linalg.solve 僅接受單一方陣作為其第一個引數。

注意

本頁面使用的矩陣一詞表示 2 維 numpy.array 物件,而非 numpy.matrix 物件。後者已不再推薦使用,即使是線性代數也是如此。有關更多資訊,請參閱矩陣物件文件

@ 運算子#

在 NumPy 1.10.0 中引入的 @ 運算子在計算 2 維陣列之間的矩陣乘積時,比其他方法更為可取。numpy.matmul 函數實作了 @ 運算子。

矩陣和向量乘積#

dot(a, b[, out])

兩個陣列的點積。

linalg.multi_dot(arrays, *[, out])

在單一函數呼叫中計算兩個或多個陣列的點積,同時自動選擇最快的求值順序。

vdot(a, b, /)

返回兩個向量的點積。

vecdot(x1, x2, /[, out, casting, order, ...])

兩個陣列的向量點積。

linalg.vecdot(x1, x2, /, *[, axis])

計算向量點積。

inner(a, b, /)

兩個陣列的內積。

outer(a, b[, out])

計算兩個向量的外積。

matmul(x1, x2, /[, out, casting, order, ...])

兩個陣列的矩陣乘積。

linalg.matmul(x1, x2, /)

計算矩陣乘積。

matvec(x1, x2, /[, out, casting, order, ...])

兩個陣列的矩陣-向量點積。

vecmat(x1, x2, /[, out, casting, order, ...])

兩個陣列的向量-矩陣點積。

tensordot(a, b[, axes])

沿指定軸計算張量點積。

linalg.tensordot(x1, x2, /, *[, axes])

沿指定軸計算張量點積。

einsum(subscripts, *operands[, out, dtype, ...])

對運算元評估愛因斯坦求和約定。

einsum_path(subscripts, *operands[, optimize])

透過考量中間陣列的建立,評估 einsum 表達式的最低成本收縮順序。

linalg.matrix_power(a, n)

將方陣提升到(整數)次方 n

kron(a, b)

兩個陣列的 Kronecker 乘積。

linalg.cross(x1, x2, /, *[, axis])

返回 3 元素向量的叉積。

分解#

linalg.cholesky(a, /, *[, upper])

Cholesky 分解。

linalg.outer(x1, x2, /)

計算兩個向量的外積。

linalg.qr(a[, mode])

計算矩陣的 qr 分解。

linalg.svd(a[, full_matrices, compute_uv, ...])

奇異值分解。

linalg.svdvals(x, /)

返回矩陣(或矩陣堆疊)x 的奇異值。

矩陣特徵值#

linalg.eig(a)

計算方陣的特徵值和右特徵向量。

linalg.eigh(a[, UPLO])

返回複 Hermitian(共軛對稱)或實對稱矩陣的特徵值和特徵向量。

linalg.eigvals(a)

計算一般矩陣的特徵值。

linalg.eigvalsh(a[, UPLO])

計算複 Hermitian 或實對稱矩陣的特徵值。

範數和其他數字#

linalg.norm(x[, ord, axis, keepdims])

矩陣或向量範數。

linalg.matrix_norm(x, /, *[, keepdims, ord])

計算矩陣(或矩陣堆疊)x 的矩陣範數。

linalg.vector_norm(x, /, *[, axis, ...])

計算向量(或向量批次)x 的向量範數。

linalg.cond(x[, p])

計算矩陣的條件數。

linalg.det(a)

計算陣列的行列式。

linalg.matrix_rank(A[, tol, hermitian, rtol])

使用 SVD 方法返回陣列的矩陣秩

linalg.slogdet(a)

計算陣列行列式的符號和(自然)對數。

trace(a[, offset, axis1, axis2, dtype, out])

返回沿陣列對角線的總和。

linalg.trace(x, /, *[, offset, dtype])

返回矩陣(或矩陣堆疊)x 指定對角線沿線的總和。

解方程式和反轉矩陣#

linalg.solve(a, b)

解線性矩陣方程式或線性純量方程式系統。

linalg.tensorsolve(a, b[, axes])

求解 x 的張量方程式 a x = b

linalg.lstsq(a, b[, rcond])

返回線性矩陣方程式的最小平方解。

linalg.inv(a)

計算矩陣的反矩陣。

linalg.pinv(a[, rcond, hermitian, rtol])

計算矩陣的 (Moore-Penrose) 偽反矩陣。

linalg.tensorinv(a[, ind])

計算 N 維陣列的「反矩陣」。

其他矩陣運算#

diagonal(a[, offset, axis1, axis2])

返回指定的對角線。

linalg.diagonal(x, /, *[, offset])

返回矩陣(或矩陣堆疊)x 的指定對角線。

linalg.matrix_transpose(x, /)

轉置矩陣(或矩陣堆疊)x

例外#

linalg.LinAlgError

linalg 函數引發的通用 Python 例外衍生物件。

一次對多個矩陣執行線性代數#

如果將上面列出的幾個線性代數常式堆疊到同一個陣列中,它們就能夠一次計算多個矩陣的結果。

這在文件中透過輸入參數規格來指示,例如 a : (..., M, M) array_like。這表示,例如,如果給定輸入陣列 a.shape == (N, M, M),它會被解釋為 N 個矩陣的「堆疊」,每個矩陣的大小為 M 乘 M。類似的規格適用於傳回值,例如,行列式具有 det : (...),在這種情況下,將返回形狀為 det(a).shape == (N,) 的陣列。這可以推廣到對更高維度陣列執行線性代數運算:多維陣列的最後 1 個或 2 個維度會被解釋為向量或矩陣,適用於每個運算。