计算一个或多个矩阵的奇异值分解。
用法
tf.linalg.svd(
tensor, full_matrices=False, compute_uv=True, name=None
)
参数
-
tensor
Tensor
形状[..., M, N]
。让P
是M
和N
的最小值。 -
full_matrices
如果为真,则计算全尺寸u
和v
。如果为 false(默认值),则仅计算前导P
奇异向量。如果compute_uv
是False
则忽略。 -
compute_uv
如果True
则将计算左奇异向量和右奇异向量,并分别在u
和v
中返回。否则,将只计算奇异值,这会明显更快。 -
name
字符串,操作的可选名称。
返回
-
s
奇异值。形状是[..., P]
。这些值按数量级倒序排列,因此 s[..., 0] 是最大值,s[..., 1] 是第二大值,以此类推。 -
u
左奇异向量。如果full_matrices
是False
(默认),那么形状是[..., M, P]
;如果full_matrices
是True
那么形状是[..., M, M]
。如果compute_uv
是False
则不返回。 -
v
右奇异向量。如果full_matrices
是False
(默认),那么形状是[..., N, P]
。如果full_matrices
是True
那么形状是[..., N, N]
。如果compute_uv
是False
则不返回。
计算 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_uv
为True
时,此处输出参数的顺序为s
、u
、v
,而不是 numpy.linalg.svd 的u
、s
、v
。 - 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.
相关用法
- Python tf.linalg.set_diag用法及代码示例
- 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.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用法及代码示例
- Python tf.linalg.LinearOperatorFullMatrix.solvevec用法及代码示例
- Python tf.linalg.LinearOperatorBlockLowerTriangular.matmul用法及代码示例
- Python tf.linalg.LinearOperatorCirculant.matvec用法及代码示例
- Python tf.linalg.LinearOperatorKronecker.matvec用法及代码示例
- Python tf.linalg.LinearOperatorCirculant3D.solvevec用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.linalg.svd。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。