当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.linalg.pinv用法及代码示例


计算一个或多个矩阵的Moore-Penrose pseudo-inverse。

用法

tf.linalg.pinv(
    a, rcond=None, validate_args=False, name=None
)

参数

  • a (批次)float - 类似于 matrix-shaped Tensor (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 Python str 前缀为此函数创建的操作。默认值:'pinv'。

返回

  • a_pinv (批次)pseudo-inverse 的输入 a 。与a 具有相同的形状,除了最右边的两个维度被转置。

抛出

  • TypeError 如果输入 a 没有 float -like dtype
  • 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 = AA的奇异值分解,则A_pinv = V @ inv(Sigma) U^T。 [(斯特朗,1980 年)][1]

此函数类似于 numpy.linalg.pinv 。它的不同之处仅在于 rcond 的默认值。在 numpy.linalg.pinv 中,默认的 rcond1e-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 页。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.linalg.pinv。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。