线性代数 ( 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仅接受单个方形数组作为其第一个参数。

笔记

本页中使用的术语“矩阵”numpy.array表示二维 对象,而不是对象numpy.matrix。不再推荐后者,即使对于线性代数也是如此。有关更多信息,请参阅 矩阵对象文档。

运营@

在 NumPy 1.10.0 中引入,@在计算 2d 数组之间的矩阵乘积时,该运算符优于其他方法。该 numpy.matmul函数实现了@运算符。

矩阵和向量积#

dot(关于])

两个数组的点积。

linalg.multi_dot(数组,*[,输出])

在单个函数调用中计算两个或多个数组的点积,同时自动选择最快的计算顺序。

vdot(一、二、/)

返回两个向量的点积。

inner(一、二、/)

两个数组的内积。

outer(关于])

计算两个向量的外积。

matmul(x1, x2, /[, 输出, 铸造, 顺序, ...])

两个数组的矩阵乘积。

tensordot(a, b[, 轴])

沿指定轴计算张量点积。

einsum(下标,*操作数[,输出,数据类型,...])

评估操作数的爱因斯坦求和约定。

einsum_path(下标,*操作数[,优化])

通过考虑中间数组的创建来评估 einsum 表达式的最低成本收缩阶。

linalg.matrix_power(一个)

将方阵求n次(整数)次方。

kron(一、二)

两个数组的克罗内克积。

分解#

linalg.cholesky(A)

乔列斯基分解。

linalg.qr(a[, 模式])

计算矩阵的 qr 分解。

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

奇异值分解。

矩阵特征值#

linalg.eig(A)

计算方阵的特征值和右特征向量。

linalg.eigh(a[, UPLO])

返回复数 Hermitian(共轭对称)或实数对称矩阵的特征值和特征向量。

linalg.eigvals(A)

计算一般矩阵的特征值。

linalg.eigvalsh(a[, UPLO])

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

规范和其他数字#

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

矩阵或向量范数。

linalg.cond(x[, p])

计算矩阵的条件数。

linalg.det(A)

计算数组的行列式。

linalg.matrix_rank(A[, tol, 厄米])

使用 SVD 方法返回数组的矩阵秩

linalg.slogdet(A)

计算数组行列式的符号和(自然)对数。

trace(a[, 偏移量, 轴1, 轴2, dtype, 输出])

返回沿数组对角线的总和。

求解方程和求逆矩阵#

linalg.solve(一、二)

求解线性矩阵方程或线性标量方程组。

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

求解 x 的张量方程。a x = b

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

返回线性矩阵方程的最小二乘解。

linalg.inv(A)

计算矩阵的(乘法)逆矩阵。

linalg.pinv(a[, rcond, 厄米])

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

linalg.tensorinv(a[, 索引])

计算 N 维数组的“逆”。

例外#

linalg.LinAlgError

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

同时在多个矩阵上进行线性代数#

1.8.0 版本中的新增功能。

如果将多个矩阵堆叠到同一个数组中,上面列出的几个线性代数例程能够同时计算多个矩阵的结果。

这在文档中通过输入参数规范(例如 )进行了指示。这意味着,如果给定一个输入数组,它会被解释为 N 个矩阵的“堆栈”,每个矩阵的大小为 M×M。类似的规范适用于返回值,例如行列式已经并将在这种情况下返回一个 shape 数组 。这可以推广到高维数组上的线性代数运算:多维数组的最后 1 或 2 维被解释为向量或矩阵,根据每个运算的情况而定。a : (..., M, M) array_likea.shape == (N, M, M)det : (...)det(a).shape == (N,)