當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy linalg.cossin用法及代碼示例


本文簡要介紹 python 語言中 scipy.linalg.cossin 的用法。

用法:

scipy.linalg.cossin(X, p=None, q=None, separate=False, swap_sign=False, compute_u=True, compute_vh=True)#

計算正交/酉矩陣的cosine-sine (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 │
                           └                   ┘

U1U2V1V2 分別是尺寸為 (p,p)(m-p,m-p)(q,q)(m-q,m-q) 的方正交/酉矩陣,以及 CS(r, r) 非負對角矩陣滿足 C^2 + S^2 = I 其中 r = min(p, m-p, q, m-q)

此外,單位矩陣的秩分別為min(p, q) - rmin(p, m - q) - rmin(m - p, q) - rmin(m - p, m - q) - r

X 可以由其自身提供,也可以由塊規範 p、q 或其子塊在可從中派生形狀的迭代中提供。請參閱下麵的示例。

參數

X 數組,可迭代

pq被省略時,要分解的複單位或實正交矩陣,或子塊X11X12X21X22的可迭代矩陣。

p 整數,可選

左上塊 X11 的行數,僅在 X 作為數組給出時使用。

q 整數,可選

左上塊 X11 的列數,僅在 X 作為數組給出時使用。

separate 布爾型,可選

如果 True ,則返回低級分量而不是矩陣因子,即 (u1,u2)theta(v1h,v2h) 而不是 ucsvh

swap_sign 布爾型,可選

如果 True ,則 -S-I 塊將位於左下方,否則(默認情況下)它們將位於右上方塊中。

compute_u 布爾型,可選

如果 False ,則不會計算 u 並返回一個空數組。

compute_vh 布爾型,可選

如果 False ,則不會計算 vh 並返回一個空數組。

返回

u ndarray

compute_u=True 時,包含由塊 U1 (p x p) 和 U2 (m-p x m-p) 正交/酉矩陣組成的塊對角正交/酉矩陣。如果 separate=True ,這包含 (U1, U2) 的元組。

cs ndarray
具有上述結構的cosine-sine 因子。

如果 separate=True ,這包含 theta 數組,其中包含以弧度表示的角度。

vh ndarray

compute_vh=True`, contains the block diagonal orthogonal/unitary matrix consisting of the blocks ``V1H ( q x q ) 和 V2H ( m-q x m-q ) 正交/酉矩陣時。如果 separate=True ,這包含 (V1H, V2H) 的元組。

參考

[1]

布萊恩·D·薩頓。計算完整的 CS 分解。數字。算法,50(1):33-65,2009。

例子

>>> import numpy as np
>>> 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

同樣可以通過子塊輸入,而無需 pq 。另外讓我們跳過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

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.cossin。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。