线性代数 (scipy.linalg)#

线性代数函数。

参见

numpy.linalg 提供了更多的线性代数函数。需要注意的是,虽然 scipy.linalg 导入了其中的大部分,但来自 scipy.linalg 的同名函数可能会提供更多或略有不同的功能。

基础#

inv(a[, overwrite_a, check_finite])

计算矩阵的逆。

solve(a, b[, lower, overwrite_a, ...])

求解方阵 a 的线性方程组 a @ x == b 中的未知数 x

solve_banded(l_and_u, ab, b[, overwrite_ab, ...])

求解方程 a x = b 中的 x,假设 a 是带状矩阵。

solveh_banded(ab, b[, overwrite_ab, ...])

解方程 a x = b。

solve_circulant(c, b[, singular, tol, ...])

求解 C x = b 中的 x,其中 C 是一个循环矩阵。

solve_triangular(a, b[, trans, lower, ...])

求解方程 a x = b 中的 x,假设 a 是一个三角矩阵。

solve_toeplitz(c_or_cr, b[, check_finite])

使用Levinson递归求解Toeplitz系统

matmul_toeplitz(c_or_cr, x[, check_finite, ...])

使用FFT进行高效的Toeplitz矩阵乘法

det(a[, overwrite_a, check_finite])

计算矩阵的行列式

norm(a[, ord, axis, keepdims, check_finite])

矩阵或向量范数。

lstsq(a, b[, cond, overwrite_a, ...])

计算方程 Ax = b 的最小二乘解。

pinv(a, *[, atol, rtol, return_rank, ...])

计算矩阵的 (Moore-Penrose) 伪逆。

pinvh(a[, atol, rtol, lower, return_rank, ...])

计算厄米矩阵的(摩尔-彭罗斯)伪逆。

kron(a, b)

Kronecker 积。

khatri_rao(a, b)

Khatri-Rao 积

orthogonal_procrustes(A, B[, check_finite])

计算正交普鲁克问题(orthogonal Procrustes problem)的矩阵解。

matrix_balance(A[, permute, scale, ...])

计算行/列平衡的对角相似变换。

subspace_angles(A, B)

计算两个矩阵之间的子空间角度。

bandwidth(a)

返回一个二维数值数组的上下带宽。

issymmetric(a[, atol, rtol])

检查一个二维方阵是否对称。

ishermitian(a[, atol, rtol])

检查一个二维方阵是否为厄米特矩阵。

LinAlgError

由 linalg 函数引发的通用 Python 异常派生对象。

LinAlgWarning

当线性代数相关操作接近算法失败条件或预期精度损失时发出的警告。

特征值问题#

eig(a[, b, left, right, overwrite_a, ...])

求解方阵的普通或广义特征值问题。

eigvals(a[, b, overwrite_a, check_finite, ...])

从普通或广义特征值问题中计算特征值。

eigh(a[, b, lower, eigvals_only, ...])

求解复数厄米特矩阵或实对称矩阵的标准或广义特征值问题。

eigvalsh(a[, b, lower, overwrite_a, ...])

解决复数厄米特矩阵或实对称矩阵的标准或广义特征值问题。

eig_banded(a_band[, lower, eigvals_only, ...])

求解实对称或复Hermitian带矩阵的特征值问题。

eigvals_banded(a_band[, lower, ...])

求解实对称或复Hermitian带矩阵的特征值问题。

eigh_tridiagonal(d, e[, eigvals_only, ...])

求解实对称三对角矩阵的特征值问题。

eigvalsh_tridiagonal(d, e[, select, ...])

求解实对称三对角矩阵的特征值问题。

分解#

lu(a[, permute_l, overwrite_a, ...])

计算矩阵的LU分解,使用部分主元法。

lu_factor(a[, overwrite_a, check_finite])

计算矩阵的旋转 LU 分解。

lu_solve(lu_and_piv, b[, trans, ...])

给定矩阵 a 的 LU 分解,求解方程组 a x = b

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

奇异值分解。

svdvals(a[, overwrite_a, check_finite])

计算矩阵的奇异值。

diagsvd(s, M, N)

从奇异值和大小 M, N 构建 SVD 中的 sigma 矩阵。

orth(A[, rcond])

使用SVD为A的值域构造一个标准正交基

null_space(A[, rcond])

使用SVD构造矩阵A的零空间的标准正交基

ldl(A[, lower, hermitian, overwrite_a, ...])

计算对称/厄米矩阵的 LDLt 或 Bunch-Kaufman 分解。

cholesky(a[, lower, overwrite_a, check_finite])

计算矩阵的 Cholesky 分解。

cholesky_banded(ab[, overwrite_ab, lower, ...])

Cholesky 分解一个带状厄米特正定矩阵

cho_factor(a[, lower, overwrite_a, check_finite])

计算矩阵的 Cholesky 分解,用于 cho_solve

cho_solve(c_and_lower, b[, overwrite_b, ...])

给定矩阵A的Cholesky分解,求解线性方程 A x = b。

cho_solve_banded(cb_and_lower, b[, ...])

求解线性方程 A x = b,已知带状厄米特矩阵 A 的 Cholesky 分解。

polar(a[, side])

计算极分解。

qr(a[, overwrite_a, lwork, mode, pivoting, ...])

计算矩阵的QR分解。

qr_multiply(a, c[, mode, pivoting, ...])

计算QR分解并将Q与矩阵相乘。

qr_update(Q, R, u, v[, overwrite_qruv, ...])

秩-k QR 更新

qr_delete(Q, R, k, int p=1[, which, ...])

QR 在行或列删除时的降级

qr_insert(Q, R, u, k[, which, rcond, ...])

在行或列插入时的QR更新

rq(a[, overwrite_a, lwork, mode, check_finite])

计算矩阵的RQ分解。

qz(A, B[, output, lwork, sort, overwrite_a, ...])

QZ 分解用于一对矩阵的广义特征值。

ordqz(A, B[, sort, output, overwrite_a, ...])

对一对矩阵进行重新排序的 QZ 分解。

schur(a[, output, lwork, overwrite_a, sort, ...])

计算矩阵的Schur分解。

rsf2csf(T, Z[, check_finite])

将实数Schur形式转换为复数Schur形式。

hessenberg(a[, calc_q, overwrite_a, ...])

计算矩阵的海森伯格形式。

cdf2rdf(w, v)

将复特征值 w 和特征向量 v 转换为块对角形式的实特征值 wr 和相关的实特征向量 vr,使得。

cossin(X[, p, q, separate, swap_sign, ...])

计算正交/酉矩阵的余弦-正弦(CS)分解。

参见

scipy.linalg.interpolative – 插值矩阵分解

矩阵函数#

expm(A)

计算数组的矩阵指数。

logm(A[, disp])

计算矩阵对数。

cosm(A)

计算矩阵的余弦。

sinm(A)

计算矩阵的正弦。

tanm(A)

计算矩阵的正切。

coshm(A)

计算双曲矩阵余弦。

sinhm(A)

计算双曲矩阵正弦。

tanhm(A)

计算双曲矩阵正切。

signm(A[, disp])

矩阵符号函数。

sqrtm(A[, disp, blocksize])

矩阵平方根。

funm(A, func[, disp])

评估由可调用对象指定的矩阵函数。

expm_frechet(A, E[, method, compute_expm, ...])

矩阵指数 A 在方向 E 上的 Frechet 导数。

expm_cond(A[, check_finite])

Frobenius 范数下矩阵指数的相对条件数。

fractional_matrix_power(A, t)

计算矩阵的分数幂。

矩阵方程求解器#

solve_sylvester(a, b, q)

计算Sylvester方程 \(AX + XB = Q\) 的解(X)。

solve_continuous_are(a, b, q, r[, e, s, ...])

求解连续时间代数Riccati方程(CARE)。

solve_discrete_are(a, b, q, r[, e, s, balanced])

求解离散时间代数Riccati方程(DARE)。

solve_continuous_lyapunov(a, q)

求解连续Lyapunov方程 \(AX + XA^H = Q\)

solve_discrete_lyapunov(a, q[, method])

求解离散Lyapunov方程 \(AXA^H - X + Q = 0\)

草图和随机投影#

clarkson_woodruff_transform(input_matrix, ...)

对输入矩阵应用Clarkson-Woodruff变换/草图。

特殊矩阵#

block_diag(*arrs)

从提供的数组创建一个块对角矩阵。

circulant(c)

构造一个循环矩阵。

companion(a)

创建一个伴随矩阵。

convolution_matrix(a, n[, mode])

构建一个卷积矩阵。

dft(n[, scale])

离散傅里叶变换矩阵。

fiedler(a)

返回一个对称的 Fiedler 矩阵

fiedler_companion(a)

返回一个 Fiedler 伴随矩阵

hadamard(n[, dtype])

构造一个Hadamard矩阵。

hankel(c[, r])

构建一个汉克尔矩阵。

helmert(n[, full])

创建一个阶数为 n 的 Helmert 矩阵。

hilbert(n)

创建一个阶数为 n 的希尔伯特矩阵。

invhilbert(n[, exact])

计算阶数为 n 的希尔伯特矩阵的逆矩阵。

leslie(f, s)

创建一个 Leslie 矩阵。

pascal(n[, kind, exact])

返回 n x n 的帕斯卡矩阵。

invpascal(n[, kind, exact])

返回 n x n 帕斯卡矩阵的逆矩阵。

toeplitz(c[, r])

构造一个 Toeplitz 矩阵。

底层例程#

get_blas_funcs(names[, arrays, dtype, ilp64])

从名称返回可用的BLAS函数对象。

get_lapack_funcs(names[, arrays, dtype, ilp64])

从名称返回可用的 LAPACK 函数对象。

find_best_blas_type([arrays, dtype])

找到最佳匹配的 BLAS/LAPACK 类型。

参见

scipy.linalg.blas – 低级 BLAS 函数

scipy.linalg.lapack – 低级 LAPACK 函数

scipy.linalg.cython_blas – 用于 Cython 的低级 BLAS 函数

scipy.linalg.cython_lapack – 为 Cython 提供的低级 LAPACK 函数