scipy.linalg.cossin¶
- scipy.linalg.cossin(X, p=None, q=None, separate=False, swap_sign=False, compute_u=True, compute_vh=True)[源代码]¶
计算正交/酉矩阵的余弦(CS)分解。
X是一个
(m, m)正交/酉矩阵,划分如下,其中左上角挡路的形状为(p, q)::┌ ┐ │ I 0 0 │ 0 0 0 │ ┌ ┐ ┌ ┐│ 0 C 0 │ 0 -S 0 │┌ ┐* │ X11 │ X12 │ │ U1 │ ││ 0 0 0 │ 0 0 -I ││ V1 │ │ │ ────┼──── │ = │────┼────││─────────┼─────────││────┼────│ │ X21 │ X22 │ │ │ U2 ││ 0 0 0 │ I 0 0 ││ │ V2 │ └ ┘ └ ┘│ 0 S 0 │ 0 C 0 │└ ┘ │ 0 0 I │ 0 0 0 │ └ ┘U1,U2,V1,V2是维数的平方正交/酉矩阵(p,p),(m-p,m-p),(q,q),以及(m-q,m-q)分别为,和C和S是(r, r)满足条件的非负对角线矩阵C^2 + S^2 = I哪里r = min(p, m-p, q, m-q)。此外,单位矩阵的秩为
min(p, q) - r,min(p, m - q) - r,min(m - p, q) - r,以及min(m - p, m - q) - r分别为。X可以由其自身和挡路规范p、q或其子块在从中导出形状的迭代中提供。请参见下面的示例。
- 参数
- X类似数组,可迭代
要分解的复酉或实正交矩阵,或子块的可迭代矩阵
X11,X12,X21,X22,何时p,q都被省略了。- p整型,可选
左上角挡路的行数
X11,仅当X作为数组给定时使用。- q整型,可选
挡路左上角的列数
X11,仅当X作为数组给定时使用。- separate布尔值,可选
如果
True返回低级分量而不是矩阵因子,即(u1,u2),theta,(v1h,v2h)而不是u,cs,vh。- swap_sign布尔值,可选
如果
True,即-S,-I挡路将位于左下角,否则(默认情况下)它们将位于右上角的挡路。- compute_u布尔值,可选
如果
False,u将不会被计算,并且返回空数组。- compute_vh布尔值,可选
如果
False,vh将不会被计算,并且返回空数组。
- 退货
- undarray
When
compute_u=True, contains the block diagonal orthogonal/unitary matrix consisting of the blocksU1(pxp) andU2(m-pxm-p) orthogonal/unitary matrices. Ifseparate=True, this contains the tuple of(U1, U2).- csndarray
- 具有上述结构的余弦-正弦因子。
如果
separate=True,它包含theta包含以弧度表示的角度的数组。
- vhndarray
When
compute_vh=True`, contains the block diagonal orthogonal/unitary matrix consisting of the blocks ``V1H(qxq) andV2H(m-qxm-q) orthogonal/unitary matrices. Ifseparate=True, this contains the tuple of(V1H, V2H).
参考文献
- 1
作者声明:Brian D.Sutton。计算完全的CS分解。数字。算法,50(1):33-65,2009。
示例
>>> from scipy.linalg import cossin >>> from scipy.stats import unitary_group >>> x = unitary_group.rvs(4) >>> u, cs, vdh = cossin(x, p=2, q=2) >>> np.allclose(x, u @ cs @ vdh) True
可以通过子块输入相同内容,而不需要
p和q。另外,让我们跳过计算u>>> ue, cs, vdh = cossin((x[:2, :2], x[:2, 2:], x[2:, :2], x[2:, 2:]), ... compute_u=False) >>> print(ue) [] >>> np.allclose(x, u @ cs @ vdh) True