当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.pinv用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.pinv 的用法。

用法:

scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True, cond=<object object>, rcond=<object object>)#

计算矩阵的 (Moore-Penrose) pseudo-inverse。

在经济模式下使用其singular-value 分解U @ S @ V 计算矩阵的广义逆,并仅选取与显著奇异值相关联的列/行。

如果 sa 的最大奇异值,则 cut-off 值的重要性由 atol + rtol * s 确定。低于该值的任何奇异值都被假定为无关紧要。

参数

a (M, N) 数组

矩阵为pseudo-inverted。

atol 浮点数,可选

绝对阈值项,默认值为 0。

rtol 浮点数,可选

相对阈值项,默认值为 max(M, N) * eps 其中 epsa 数据类型的机器精度值。

return_rank 布尔型,可选

如果为 True,则返回矩阵的有效秩。

check_finite 布尔型,可选

是否检查输入矩阵是否仅包含有限数。禁用可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能会导致问题(崩溃、非终止)。

cond, rcond 浮点数,可选

在旧版本中,这些值旨在用作 atolrtol=0 。如果两者都给出了rcond,则覆盖了cond,因此代码不正确。因此,强烈建议不要使用这些,而是建议使用上述公差。事实上,如果提供的话,atol、rtol 优先于这些关键字。

返回

B (N, M) ndarray

矩阵a的pseudo-inverse。

rank int

矩阵的有效秩。如果return_rank 为真,则返回。

抛出

LinAlgError

如果 SVD 计算不收敛。

注意

如果A 可逆,则Moore-Penrose 伪逆正好是A 的逆[1]。如果 A 不可逆,则 Moore-Penrose 伪逆计算 Ax = bx 解,从而最小化 ||Ax - b|| [1]。

参考

[1] (1,2,3)

彭罗斯,R.(1956)。关于线性矩阵方程的最佳近似解。剑桥哲学会数学会刊,52(1), 17-19。号码:10.1017/S0305004100030929

例子

给定一个 m x n 矩阵 A 和一个 n x m 矩阵 B,四个 Moore-Penrose 条件是:

  1. ABA = A ( BA 的广义逆),

  2. BAB = B ( AB 的广义逆),

  3. (AB)* = AB(AB 是埃尔米特式),

  4. (BA)* = BA(BA 是埃尔米特式)[1]。

这里,A*表示共轭转置。 Moore-Penrose 伪逆是唯一的 B,它满足所有这四个条件并且对于任何 A 都存在。请注意,与标准逆矩阵不同,A 不必是方阵或具有线性独立的列/行。

例如,我们可以计算随机非方阵的Moore-Penrose伪逆并验证它是否满足四个条件。

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((9, 6))
>>> B = linalg.pinv(A)
>>> np.allclose(A @ B @ A, A)  # Condition 1
True
>>> np.allclose(B @ A @ B, B)  # Condition 2
True
>>> np.allclose((A @ B).conj().T, A @ B)  # Condition 3
True
>>> np.allclose((B @ A).conj().T, B @ A)  # Condition 4
True

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.pinv。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。