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


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


计算一个或多个矩阵的奇异值分解。

用法

tf.linalg.svd(
    tensor, full_matrices=False, compute_uv=True, name=None
)

参数

  • tensor Tensor 形状 [..., M, N] 。让 PMN 的最小值。
  • full_matrices 如果为真,则计算全尺寸 uv 。如果为 false(默认值),则仅计算前导 P 奇异向量。如果 compute_uvFalse 则忽略。
  • compute_uv 如果 True 则将计算左奇异向量和右奇异向量,并分别在 uv 中返回。否则,将只计算奇异值,这会明显更快。
  • name 字符串,操作的可选名称。

返回

  • s 奇异值。形状是 [..., P] 。这些值按数量级倒序排列,因此 s[..., 0] 是最大值,s[..., 1] 是第二大值,以此类推。
  • u 左奇异向量。如果 full_matricesFalse (默认),那么形状是 [..., M, P] ;如果 full_matricesTrue 那么形状是 [..., M, M] 。如果 compute_uvFalse 则不返回。
  • v 右奇异向量。如果 full_matricesFalse (默认),那么形状是 [..., N, P] 。如果 full_matricesTrue 那么形状是 [..., N, N] 。如果 compute_uvFalse 则不返回。

计算 tensor 中每个内部矩阵的 SVD,使得 tensor[..., :, :] = u[..., :, :] * diag(s[..., :, :]) * transpose(conj(v[..., :, :]))

# a is a tensor.
# s is a tensor of singular values.
# u is a tensor of left singular vectors.
# v is a tensor of right singular vectors.
s, u, v = svd(a)
s = svd(a, compute_uv=False)

numpy 兼容性

大部分等同于 numpy.linalg.svd,除了

  • compute_uvTrue 时,此处输出参数的顺序为 suv ,而不是 numpy.linalg.svd 的 usv
  • full_matrices 默认为 False,而不是 numpy.linalg.svd 的 True
  • tf.linalg.svd 使用 SVD 的标准定义,使得 a 的左奇异向量是 u 的列。而 a 的右奇异向量是 v 的列。另一方面,numpy.linalg.svd 返回伴随的 作为第三个输出参数。
import tensorflow as tf
import numpy as np
s, u, v = tf.linalg.svd(a)
tf_a_approx = tf.matmul(u, tf.matmul(tf.linalg.diag(s), v, adjoint_b=True))
u, s, v_adj = np.linalg.svd(a, full_matrices=False)
np_a_approx = np.dot(u, np.dot(np.diag(s), v_adj))
# tf_a_approx and np_a_approx should be numerically close.

相关用法


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