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

矩阵和向量积

dot (a,b) [, out] )

两个数组的点积。

linalg.multi_dot \(数组, * [, out] )

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

vdot (a,b)

返回两个向量的点积。

inner (a,b)

两个数组的内积。

outer (a,b) [, out] )

计算两个向量的外积。

matmul \(x1,x2,)/[, out, casting, order, ...] )

两个数组的矩阵积。

tensordot (a,b) [, axes] )

沿指定轴计算张量点积。

einsum \(下标, * 操作数 [, out, dtype, ...] )

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

einsum_path \(下标, * 操作数 [, optimize] )

通过考虑创建中间数组,计算einsum表达式的最低成本收缩顺序。

linalg.matrix_power (a,n)

将平方矩阵提高到(整数)幂 n .

kron (a,b)

两个阵列的克罗内克积。

分解

linalg.cholesky (a)

胆汁分解。

linalg.qr (a) [, mode] )

计算矩阵的qr因子分解。

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

奇异值分解。

矩阵特征值

linalg.eig (a)

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

linalg.eigh (a) [, UPLO] )

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

linalg.eigvals (a)

计算一般矩阵的特征值。

linalg.eigvalsh (a) [, UPLO] )

计算复厄米特矩阵或实对称矩阵的特征值。

规范和其他数字

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

矩阵或向量范数。

linalg.cond (x) [, p] )

计算矩阵的条件数。

linalg.det (a)

计算数组的行列式。

linalg.matrix_rank (m) [, tol, hermitian] )

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

linalg.slogdet (a)

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

trace (a) [, offset, axis1, axis2, dtype, out] )

沿数组的对角线返回和。

解方程和逆矩阵

linalg.solve (a,b)

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

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

解张量方程 a x = b 为X。

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

将最小二乘法返回到线性矩阵方程。

linalg.inv (a)

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

linalg.pinv (a) [, rcond, hermitian] )

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

linalg.tensorinv (a) [, ind] )

计算n维数组的“逆”。

例外情况

linalg.LinAlgError 

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维被解释为向量或矩阵,适用于每个运算。