线性代数#

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 仅接受单个方阵作为其第一个参数.

备注

此页面上使用的术语“矩阵”表示一个二维 numpy.array 对象,而不是一个 numpy.matrix 对象.后者不再推荐使用,即使对于线性代数也是如此.有关更多信息,请参阅 the matrix object documentation .

@ 运算符#

在 NumPy 1.10.0 中引入,当计算二维数组之间的矩阵乘积时, @ 运算符优于其他方法. 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])

计算两个向量的外积.

linalg.outer (x1, x2, /)

计算两个向量的外积.

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.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])

计算复埃尔米特或实对称矩阵的特征值.

范数和其他数值#

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 个维度被解释为向量或矩阵,这对于每个运算都是合适的.