lstsq¶
求解线性方程组的最小二乘问题。
参数¶
x (Tensor):形状为
(*, M, N)
的矩阵 Tensor,*
为零或更大的批次维度。数据类型为 float32 或 float64 。y (Tensor):形状为
(*, M, K)
的矩阵 Tensor,*
为零或更大的批次维度。数据类型为 float32 或 float64 。rcond (float,可选):默认值为 None,用来决定
x
有效秩的 float 型浮点数。当rcond
为 None 时,该值会被设为max(M, N)
乘x
数据类型对应的机器精度。driver (str,可选):默认值为 None,用来指定计算使用的 LAPACK 库方法。CPU 下该参数的合法值为 'gels','gelsy' (默认),'gelsd','gelss';CUDA 下该参数的合法值为 'gels' (默认) 。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
返回¶
Tuple,包含
solution
、residuals
、rank
和singular_values
。
solution
指最小二乘解,形状为(*, N, K)
的 Tensor。
residuals
指最小二乘解对应的残差,形状为(*, K)
的 Tensor;当M > N
且x
中所有矩阵均为满秩矩阵时,该值会被计算,否则返回空 Tensor。
rank
指x
中矩阵的秩,形状为(*)
的 Tensor;当driver
为 'gelsy', 'gelsd', 'gelss' 时,该值会被计算,否则返回空 Tensor。
singular_values
指x
中矩阵的奇异值,形状为(*, min(M, N))
的 Tensor;当driver
为 'gelsd', 'gelss' 时,该值会被计算,否则返回空 Tensor。
代码示例¶
import paddle
paddle.set_device("cpu")
x = paddle.to_tensor([[1, 3], [3, 2], [5, 6.]])
y = paddle.to_tensor([[3, 4, 6], [5, 3, 4], [1, 2, 1.]])
results = paddle.linalg.lstsq(x, y, driver="gelsd")
print(results[0])
# [[ 0.78350395, -0.22165027, -0.62371236],
# [-0.11340097, 0.78866047, 1.14948535]]
print(results[1])
# [19.81443405, 10.43814468, 30.56185532])
print(results[2])
# 2
print(results[3])
# [9.03455734, 1.54167950]
x = paddle.to_tensor([[10, 2, 3], [3, 10, 5], [5, 6, 12.]])
y = paddle.to_tensor([[4, 2, 9], [2, 0, 3], [2, 5, 3.]])
results = paddle.linalg.lstsq(x, y, driver="gels")
print(results[0])
# [[ 0.39386186, 0.10230173, 0.93606132],
# [ 0.10741687, -0.29028133, 0.11892585],
# [-0.05115091, 0.51918161, -0.19948854]]
print(results[1])
# []