线性代数#
NumPy 的线性代数函数依赖于 BLAS 和 LAPACK 来提供标准线性代数算法的高效底层实现。这些库可以由 NumPy 本身通过 C 版本实现其部分参考实现来提供,但如果可能,更倾向于利用专业处理器功能的高度优化库。这类库的例子包括 OpenBLAS、MKL (TM) 和 ATLAS。由于这些库是多线程且依赖于处理器,因此可能需要环境变量和像 threadpoolctl 这样的外部包来控制线程数量或指定处理器架构。
SciPy 库还包含一个 linalg 子模块,SciPy 和 NumPy 的子模块提供的功能存在重叠。SciPy 包含 NumPy 的 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 函数实现了 @ 运算符。
矩阵和向量积#
|
两个数组的点积。 |
|
在一次函数调用中计算两个或多个数组的点积,同时自动选择最快的求值顺序。 |
|
返回两个向量的点积。 |
|
两个数组的向量点积。 |
|
计算向量点积。 |
|
两个数组的内积。 |
|
计算两个向量的外积。 |
|
计算两个向量的外积。 |
|
两个数组的矩阵乘积。 |
|
计算矩阵乘积。 |
|
两个数组的矩阵-向量点积。 |
|
两个数组的向量-矩阵点积。 |
|
沿指定轴计算张量点积。 |
|
沿指定轴计算张量点积。 |
|
评估运算元的爱因斯坦求和约定。 |
|
通过考虑中间数组的创建,评估 einsum 表达式的最低成本收缩顺序。 |
|
将方阵提高到 (整数) 幂 n。 |
|
两个数组的克罗内克积。 |
|
返回 3 元素向量的叉积。 |
分解#
|
乔列斯基分解。 |
|
计算矩阵的 qr 分解。 |
|
奇异值分解。 |
|
返回矩阵(或矩阵堆栈) |
矩阵特征值#
|
计算方阵的特征值和右特征向量。 |
|
返回复共轭厄米(共轭对称)矩阵或实对称矩阵的特征值和特征向量。 |
计算通用矩阵的特征值。 |
|
|
计算复共轭厄米或实对称矩阵的特征值。 |
范数和其他数值#
|
矩阵或向量范数。 |
|
计算矩阵(或矩阵堆栈) |
|
计算向量(或向量批次) |
|
计算矩阵的条件数。 |
|
计算数组的行列式。 |
|
使用 SVD 方法返回数组的矩阵秩 |
计算数组的行列式的符号和(自然)对数。 |
|
|
返回数组对角线上的元素之和。 |
|
返回矩阵(或矩阵堆栈) |
求解方程和求逆矩阵#
|
求解线性矩阵方程或线性标量方程组。 |
|
为 x 求解张量方程 |
|
返回线性矩阵方程的最小二乘解。 |
|
计算矩阵的逆。 |
|
计算矩阵的(摩尔-彭罗斯)伪逆。 |
|
计算 N 维数组的“逆”。 |
其他矩阵运算#
|
返回指定的对角线。 |
|
返回矩阵(或矩阵堆栈) |
|
转置矩阵(或矩阵堆栈) |
异常#
linalg 函数引发的通用 Python 异常派生对象。 |
一次处理多个矩阵的线性代数#
上面列出的几项线性代数例程可以一次性计算多个矩阵的结果,如果它们被堆叠到同一个数组中。
这在文档中通过输入参数说明来指示,例如 a : (..., M, M) array_like。这意味着,例如,如果给定一个数组 a.shape == (N, M, M),则它被解释为 N 个 M-by-M 矩阵的“堆栈”。类似的说明也适用于返回值,例如行列式有 det : (...),在这种情况下将返回一个形状为 det(a).shape == (N,) 的数组。这可以推广到多维数组的线性代数运算:多维数组的最后 1 或 2 维被解释为向量或矩阵,具体取决于每个运算。