您的位置:首页 > 新闻 > 会展 > jnp.linalg.svd

jnp.linalg.svd

2025/9/17 7:34:03 来源:https://blog.csdn.net/Zion__/article/details/139886301  浏览:    关键词:jnp.linalg.svd

jnp.linalg.svd 是 JAX 库中的一个函数,用于计算矩阵的奇异值分解 (SVD)。SVD 将一个矩阵分解成三个矩阵的乘积,通常表示为 A = U * S * V^T,其中:

  • A 是原始矩阵。
  • U 是一个正交矩阵,列是左奇异向量。
  • S 是一个对角矩阵,对角线元素是奇异值。
  • V 是一个正交矩阵,列是右奇异向量。

jnp.linalg.svd 的详细用法如下:

函数签名

jnp.linalg.svd(A, full_matrices=True, compute_uv=True, hermitian=False)

参数说明

  • A (array_like): 需要进行奇异值分解的输入矩阵。
  • full_matrices (bool, optional): 如果为 True,计算完整的 U 和 V 矩阵;如果为 False,计算经济型分解。默认值为 True
  • compute_uv (bool, optional): 如果为 True,同时计算 U 和 V 矩阵;如果为 False,仅计算奇异值。默认值为 True
  • hermitian (bool, optional): 如果为 True,假设输入矩阵是 Hermitian(对称的)。这可以加快计算速度并提供更稳定的结果。默认值为 False

返回值

jnp.linalg.svd 返回三个值:

  • U (ndarray): 左奇异向量组成的矩阵。
  • S (ndarray): 奇异值组成一维向量。
  • V (ndarray): 右奇异向量组成的矩阵。

如果 compute_uv=False,只返回奇异值 S

示例代码

import jax.numpy as jnp# 创建一个示例矩阵
A = jnp.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 计算奇异值分解
U, S, V = jnp.linalg.svd(A, full_matrices=False)print("U矩阵:\n", U)
print("奇异值:\n", S)
print("V矩阵:\n", V)

解释

  • full_matrices=False 表示计算经济型分解,这意味着 UV 矩阵的维度会更小,计算更高效。
  • compute_uv=True 表示同时计算 UV 矩阵以及奇异值。
  • 结果中的 U 矩阵包含左奇异向量,S 是奇异值的对角矩阵,V 矩阵包含右奇异向量。

使用奇异值进行重构

如果要使用奇异值重构原始矩阵,可以使用以下代码:

# 构造对角矩阵S
S_diag = jnp.diag(S)# 重构矩阵A
A_reconstructed = jnp.dot(U, jnp.dot(S_diag, V))
print("重构矩阵A:\n", A_reconstructed)

经济型分解示例

full_matrices=False 时,UV 的维度会减小:

U, S, V = jnp.linalg.svd(A, full_matrices=False)
print("U形状:", U.shape)
print("S形状:", S.shape)
print("V形状:", V.shape)

这会输出经济型分解的矩阵形状,通常用于大型矩阵的计算以节省内存和提高效率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com