中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

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
>>>