scipy.linalg.

pinv#

scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True)[源]#

计算矩阵的(Moore-Penrose)伪逆。

使用矩阵的奇异值分解 U @ S @ V 在经济模式下计算矩阵的广义逆,并仅选择与重要奇异值相关的列/行。

如果 sa 的最大奇异值,则重要性截止值由 atol + rtol * s 确定。任何低于此值的奇异值都被认为是不重要的。

本文档假定数组参数具有指定的“核心”形状。但是,此函数的数组参数可能在核心形状前添加了额外的“批处理”维度。在这种情况下,数组被视为低维切片的批次;详见批处理线性操作

参数:
a(M, N) array_like

待求伪逆的矩阵。

atolfloat, optional

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

1.7.0 版本新增。

rtolfloat, optional

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

1.7.0 版本新增。

return_rankbool, optional

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

check_finitebool, optional

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

返回:
B(N, M) ndarray

矩阵 a 的伪逆。

rankint

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

抛出:
LinAlgError

如果 SVD 计算不收敛。

另请参阅

pinvh

Hermitian 矩阵的 Moore-Penrose 伪逆。

说明

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

参考文献

[1] (1,2,3)

Penrose, R. (1956). On best approximate solutions of linear matrix equations. Mathematical Proceedings of the Cambridge Philosophical Society, 52(1), 17-19. doi:10.1017/S0305004100030929

示例

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

  1. ABA = ABA 的广义逆),

  2. BAB = BAB 的广义逆),

  3. (AB)* = ABAB 是 Hermitian 矩阵),

  4. (BA)* = BABA 是 Hermitian 矩阵)[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