當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。