linalg.svd
功能描述
奇异值分解。
当a是二维数组,并且full_matrices=False时,它被分解为u @ np.diag(s) @ vh = (u * s) @ vh,其中u和vh的埃尔米特转置是具有正交列的二维数组,s是a奇异值的1维数组。当a是更高维度时,SVD(奇异值分解)以堆叠模式应用。
必选输入参数
| 参数名 | 类型 | 说明 | 
|---|---|---|
| a | (…,M,N) array_like | 具有a.ndim >= 2的实数组或复数组。 | 
| b | array_like | - | 
可选输入参数
| 参数名 | 类型 | 默认值 | 说明 | 
|---|---|---|---|
| full_matrices | bool | True | 如果是默认值True,u和vh分别具有形状(...,M,M)和(...,N,N)。否则,形状分别是(...,M,K)和(...,K,N),其中K=min(M,N)。 | 
| compute_uv | bool | True | 除了s之外,是否计算u和vh。 | 
返回数据
| 名称 | 类型 | 说明 | 
|---|---|---|
| u | {(…,M,M), (…,M,K) } array | 酉矩阵。前a.ndim-2维度与输入a的尺寸相同,最后两个维度的大小取决于full_matrices的值。仅在compute_uv为True时返回。 | 
| s | (…, K) array | 具有奇异值的向量,在每个向量中按降序排序。前a.ndim-2维度与输入a的尺寸相同。 | 
| vh | {(…,N,N), (…,K,N)} array | 酉矩阵。前a.ndim-2维度与输入a的尺寸相同,最后两个维度的大小取决于full_matrices的值。仅在compute_uv为True时返回。 | 
示例
>>> import numpy as np >>> a = np.random.randn(9, 6) + 1j * np.random.randn(9, 6) >>> b = np.random.randn(2, 7, 8, 3) + 1j * np.random.randn(2, 7, 8, 3) >>> >>> u, s, vh = np.linalg.svd(a, full_matrices=True) >>> u.shape, s.shape, vh.shape ((9, 9), (6,), (6, 6)) >>> np.allclose(a, np.dot(u[:, :6] * s, vh)) True >>> >>> smat = np.zeros((9,6), dtype=complex) >>> smat[:6, :6] = np.diag(s) >>> np.allclose(a, np.dot(u, np.dot(smat, vh))) True >>>
父主题: 线性代数函数