线性代数 (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
只接受一个单一的方形数组作为其第一个参数.
备注
本页中使用的术语 matrix 指的是一个二维的 numpy.array
对象,而不是 numpy.matrix
对象.后者不再推荐使用,即使是对于线性代数.更多信息请参见 矩阵对象文档.
@
运算符#
在 NumPy 1.10.0 中引入的 @
运算符在计算两个二维数组之间的矩阵乘积时优于其他方法.:func:numpy.matmul
函数实现了 @
运算符.
矩阵和向量积#
|
两个数组的点积. |
|
在一个函数调用中计算两个或更多数组的点积,同时自动选择最快的评估顺序. |
|
返回两个向量的点积. |
|
两个数组的向量点积. |
|
计算向量点积. |
|
两个数组的内积. |
|
计算两个向量的外积. |
|
两个数组的矩阵乘积. |
|
计算矩阵乘积. |
|
计算沿指定轴的张量点积. |
|
计算沿指定轴的张量点积. |
|
对操作数进行爱因斯坦求和约定评估. |
|
通过考虑中间数组的创建,评估einsum表达式的最低成本收缩顺序. |
|
将一个方阵提升到(整数)幂 n. |
|
两个数组的克罗内克积. |
|
返回3元素向量的叉积. |
分解#
|
Cholesky 分解. |
|
计算两个向量的外积. |
|
计算矩阵的qr分解. |
|
奇异值分解. |
|
返回矩阵(或矩阵堆栈)``x`` 的奇异值. |
矩阵特征值#
|
计算一个方阵的特征值和右特征向量. |
|
返回复数厄米特(共轭对称)或实对称矩阵的特征值和特征向量. |
计算一般矩阵的特征值. |
|
|
计算复数厄米矩阵或实对称矩阵的特征值. |
规范和其他数字#
|
矩阵或向量范数. |
|
计算矩阵(或矩阵堆栈)``x`` 的矩阵范数. |
|
计算向量(或向量批)``x`` 的向量范数. |
|
计算矩阵的条件数. |
|
计算数组的行列式. |
|
使用 SVD 方法返回数组的矩阵秩 |
计算数组的符号和(自然)对数行列式. |
|
|
返回数组对角线上的和. |
|
返回矩阵(或矩阵堆栈)``x`` 沿指定对角线的和. |
求解方程和矩阵求逆#
|
求解线性矩阵方程,或线性标量方程组. |
|
求解张量方程 |
|
返回线性矩阵方程的最小二乘解. |
|
计算矩阵的逆. |
|
计算矩阵的(摩尔-彭罗斯)伪逆. |
|
计算一个 N 维数组的 '逆'. |
其他矩阵操作#
|
返回指定的对角线. |
|
返回矩阵(或矩阵堆栈)``x`` 的指定对角线. |
|
转置一个矩阵(或一组矩阵)``x``. |
异常#
由 linalg 函数引发的通用 Python 异常派生对象. |
同时对多个矩阵进行线性代数运算#
在 1.8.0 版本加入.
上面列出的几个线性代数例程能够计算多个矩阵的结果,如果它们被堆叠到同一个数组中.
这在文档中通过输入参数规范来表示,例如 a : (..., M, M) array_like
.这意味着如果给定一个输入数组 a.shape == (N, M, M)
,它被解释为一个”堆栈”的 N 个矩阵,每个矩阵的大小为 M×M.类似的规范适用于返回值,例如行列式有 det : (...)
并且在这种情况下将返回一个形状为 det(a).shape == (N,)
的数组.这推广到高维数组的线性代数运算:多维数组的最后 1 或 2 个维度被解释为向量或矩阵,根据每个操作的需要.