本文简要介绍 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
计算矩阵的广义逆,并仅选取与显著奇异值相关联的列/行。如果
s
是a
的最大奇异值,则 cut-off 值的重要性由atol + rtol * s
确定。低于该值的任何奇异值都被假定为无关紧要。- a: (M, N) 数组
矩阵为pseudo-inverted。
- atol: 浮点数,可选
绝对阈值项,默认值为 0。
- rtol: 浮点数,可选
相对阈值项,默认值为
max(M, N) * eps
其中eps
是a
数据类型的机器精度值。- return_rank: 布尔型,可选
如果为 True,则返回矩阵的有效秩。
- check_finite: 布尔型,可选
是否检查输入矩阵是否仅包含有限数。禁用可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能会导致问题(崩溃、非终止)。
- cond, rcond: 浮点数,可选
在旧版本中,这些值旨在用作
atol
和rtol=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 = b
的x
解,从而最小化||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 条件是:ABA = A
(B
是A
的广义逆),BAB = B
(A
是B
的广义逆),(AB)* = AB
(AB
是埃尔米特式),(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
相关用法
- Python SciPy linalg.pinvh用法及代码示例
- Python SciPy linalg.polar用法及代码示例
- Python SciPy linalg.pascal用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
- Python SciPy linalg.LaplacianNd用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代码示例
- Python SciPy linalg.rsf2csf用法及代码示例
- Python SciPy linalg.hessenberg用法及代码示例
- Python SciPy linalg.tril用法及代码示例
- Python SciPy linalg.triu用法及代码示例
- Python SciPy linalg.svd用法及代码示例
- Python SciPy linalg.ishermitian用法及代码示例
- Python SciPy linalg.invhilbert用法及代码示例
- Python SciPy linalg.factorized用法及代码示例
- Python SciPy linalg.lu_factor用法及代码示例
- Python SciPy linalg.SuperLU用法及代码示例
- Python SciPy linalg.lsqr用法及代码示例
- Python SciPy linalg.cho_factor用法及代码示例
- Python SciPy linalg.fractional_matrix_power用法及代码示例
- Python SciPy linalg.eig_banded用法及代码示例
- Python SciPy linalg.tanhm用法及代码示例
- Python SciPy linalg.orthogonal_procrustes用法及代码示例
- Python SciPy linalg.use_solver用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.pinv。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。