计算一个或多个矩阵的Moore-Penrose pseudo-inverse。
用法
tf.linalg.pinv(
a, rcond=None, validate_args=False, name=None
)
参数
-
a
(批次)float
- 类似于 matrix-shapedTensor
(s),它们将是 pseudo-inverted。 -
rcond
Tensor
的小奇异值截止值。小于rcond
* largest_singular_value(同样,以模数表示)的奇异值(以模数表示)设置为零。必须针对tf.shape(a)[:-2]
广播。默认值:10. * max(num_rows, num_cols) * np.finfo(a.dtype).eps
。 -
validate_args
当True
时,可能会在图中嵌入额外的断言。默认值:False
(即不添加图形断言)。 -
name
Pythonstr
前缀为此函数创建的操作。默认值:'pinv'。
返回
-
a_pinv
(批次)pseudo-inverse 的输入a
。与a
具有相同的形状,除了最右边的两个维度被转置。
抛出
-
TypeError
如果输入a
没有float
-likedtype
。 -
ValueError
如果输入a
的维度少于 2 个。
使用矩阵的singular-value 分解 (SVD) 计算矩阵的广义逆,并包括所有大奇异值。
矩阵A
的pseudo-inverse定义为:''solves'[least-squares问题]A @ x = b
的矩阵,'即如果x_hat
是一个解,那么A_pinv
是矩阵使得 x_hat = A_pinv @ b
。可以证明,如果U @ Sigma @ V.T = A
是A
的奇异值分解,则A_pinv = V @ inv(Sigma) U^T
。 [(斯特朗,1980 年)][1]
此函数类似于 numpy.linalg.pinv
。它的不同之处仅在于 rcond
的默认值。在 numpy.linalg.pinv
中,默认的 rcond
是 1e-15
。这里的默认值为 10. * max(num_rows, num_cols) * np.finfo(dtype).eps
。
例子
import tensorflow as tf
import tensorflow_probability as tfp
a = tf.constant([[1., 0.4, 0.5],
[0.4, 0.2, 0.25],
[0.5, 0.25, 0.35]])
tf.matmul(tf.linalg..pinv(a), a)
# ==> array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]], dtype=float32)
a = tf.constant([[1., 0.4, 0.5, 1.],
[0.4, 0.2, 0.25, 2.],
[0.5, 0.25, 0.35, 3.]])
tf.matmul(tf.linalg..pinv(a), a)
# ==> array([[ 0.76, 0.37, 0.21, -0.02],
[ 0.37, 0.43, -0.33, 0.02],
[ 0.21, -0.33, 0.81, 0.01],
[-0.02, 0.02, 0.01, 1. ]], dtype=float32)
参考
[1]:G。斯特朗。 “线性代数及其应用,第 2 版。”学术出版社,1980 年,第 139-142 页。
相关用法
- Python tf.linalg.LinearOperatorFullMatrix.matvec用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz.solve用法及代码示例
- Python tf.linalg.LinearOperatorIdentity.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorPermutation.solve用法及代码示例
- Python tf.linalg.band_part用法及代码示例
- Python tf.linalg.LinearOperatorKronecker.diag_part用法及代码示例
- Python tf.linalg.lu_matrix_inverse用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz.matvec用法及代码示例
- Python tf.linalg.LinearOperatorBlockLowerTriangular.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorLowerTriangular.matvec用法及代码示例
- Python tf.linalg.LinearOperatorCirculant2D.solve用法及代码示例
- Python tf.linalg.LinearOperatorCirculant3D.diag_part用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorCirculant2D.assert_non_singular用法及代码示例
- Python tf.linalg.LinearOperatorPermutation.diag_part用法及代码示例
- Python tf.linalg.LinearOperatorToeplitz用法及代码示例
- Python tf.linalg.LinearOperatorCirculant2D.matvec用法及代码示例
- Python tf.linalg.LinearOperatorTridiag.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorTridiag.solve用法及代码示例
- Python tf.linalg.LinearOperatorZeros.matmul用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.linalg.pinv。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。