pinv¶
该 API 通过奇异值分解(svd
)来计算伪逆矩阵,支持单个矩阵或批量矩阵。
如果
hermitian
为假,那么该 API 会利用奇异值分解(svd
)进行伪逆矩阵的求解。如果
hermitian
为真,那么该 API 会利用特征值分解(eigh
)进行伪逆矩阵的求解。同时输入需要满足以下条件:如果数据类型为实数,那么输入需要为对称矩阵;如果数据类型为复数,那么输入需要为hermitian
矩阵。
参数¶
x (Tensor):输入变量,类型为 Tensor,数据类型为 float32、float64、complex64、complex12,形状为(M, N)或(B, M, N)。
rcond (float64,可选):奇异值(特征值)被截断的阈值,奇异值(特征值)小于 rcond * 最大奇异值时会被置为 0,默认值为 1e-15。
hermitian (bool,可选):是否为
hermitian
矩阵或者实对称矩阵,默认值为 False。name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
返回¶
Tensor,输入矩阵的伪逆矩阵,数据类型和输入数据类型一致。形状为(N, M)或(B, N, M)。
代码示例¶
import paddle
x = paddle.arange(15).reshape((3, 5)).astype('float64')
input = paddle.to_tensor(x)
out = paddle.linalg.pinv(input)
print(input)
print(out)
# input:
# [[0. , 1. , 2. , 3. , 4. ],
# [5. , 6. , 7. , 8. , 9. ],
# [10., 11., 12., 13., 14.]]
# out:
# [[-0.22666667, -0.06666667, 0.09333333],
# [-0.12333333, -0.03333333, 0.05666667],
# [-0.02000000, 0.00000000, 0.02000000],
# [ 0.08333333, 0.03333333, -0.01666667],
# [ 0.18666667, 0.06666667, -0.05333333]]
# one can verify : x * out * x = x ;
# or out * x * out = x ;