八.Linalg模块
3.分解
(2)SVD:
对矩阵进行SVD:[<U>,<s>,<Vh>=]scipy.linalg.svd(<a>[,full_matrices=True,compute_uv=True,overwrite_a=False,check_finite=True,lapack_driver='gesdd'])
#分解为<a>=<U>*<s>*<vh>
#参数说明:其他参数同scipy.linalg.lu()
full_matrices:为True,则U/Vh的形状为M×M/N×N
为False,则U/Vh的形状为M×K/K×N,K=min(M,N)
compute_uv:指定是否返回U/Vh;为bool
lapack_drive:指定用于求解的LAPACK driver;为"gesdd"(Divide-and-Conquer approach)/"gesvd"(General Rectangular Approach)
#MATLAB/Octave使用"gesvd"
U:返回左奇异矩阵;为M×K ndarray
s:返回奇异值矩阵;为K×K ndarray
Vh:返回右奇异矩阵;为K×N ndarray
######################################################################################################################
[<s>=]scipy.linalg.svdvals(<a>[,overwrite_a=False,check_finite=True])
######################################################################################################################
[<S>=]scipy.linalg.diagsvd(<s>,<M>,<N>)
######################################################################################################################
通过SVD求线性空间的标准正交基:[<Q>=]scipy.linalg.orth(<A>[,rcond=None])
#参数说明:
A:指定1组基;为M×N array-like(每行为1个基)
rcond:指定小奇异值的截断点;为float,默认为eps*max(M,N)
#小于rcond*max(all sigular value)的奇异值会被认为是0
Q:返回标准正交基;为M×K ndarray,K为<A>的有效秩
#实例:
>>> linalg.orth([[2,3,0],[1,2,0],[0,0,2]])
array([[-0.85065081, 0. , -0.52573111],
[-0.52573111, 0. , 0.85065081],
[ 0. , 1. , 0. ]])
>>> linalg.orth([[2,3,0],[1,2,3]])
array([[-0.68469764, -0.72882724],
[-0.72882724, 0.68469764]])
######################################################################################################################
通过SVD求矩阵的零空间的标准正交基:[<Z>=]scipy.linalg.null_space(<A>[,rcond=None])
#参数说明:其他参数同scipy.linalg.orth()
Z:返回标准正交基;为N×K ndarray
######################################################################################################################
对矩阵进行极分解:[<u>,<p>=]scipy.linalg.polar(<a>[,side='right'])
(3)Cholesky分解:
对方阵进行Cholesky分解:[<c>=]scipy.linalg.cholesky(<a>[,lower=False,overwrite_a=False,check_finite=True])
对带状埃尔米特正定矩阵进行Cholesky分解:[<cb>=]scipy.linalg.cholesky_banded(<ab>[,overwrite_ab=False,lower=False,check_finite=True])
#分解为<a>=<c>*<c>^T或<a>=<c>^T*<c>
#参数说明:其他参数同scipy.linalg.eigh()
a:指定原矩阵;为M×M array-like
ab:指定带状埃尔米特正定矩阵;为(u+1)×M array-like
#格式参见官方文档
c:返回三角矩阵;为M×M ndarray
cb:返回;为(u+1)×M ndarray
#格式和<ab>相同
######################################################################################################################
scipy.linalg.cho_factor(<a>[,lower=False,overwrite_a=False,check_finite=True])
######################################################################################################################
scipy.linalg.cho_solve(<c_and_lower>,<b>[,overwrite_b=False,check_finite=True])
scipy.linalg.cho_solve_banded(<cb_and_lower>,<b>[,overwrite_b=False,check_finite=True])
######################################################################################################################
对矩阵进行LDLt分解或Bunch-Kaufman factorization:[<lu>,<d>,<perm>=]scipy.linalg