栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python scipy矩阵分解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python scipy矩阵分解

        在许多应用程序中,使用其他表示形式分解矩阵非常有用。SciPy支持多种分解,并不是所有的都会用到,本文根据实际使用情况逐步添加测试用例。

1、特征值和特征向量

        特征值-特征向量问题是最常用的线性代数运算之一。在一种流行的形式中,特征值-特征向量问题是找到一些方阵A标量lamda和相应的向量 v, 这样:

        例如,考虑找到矩阵的特征值和特征向量:

        特征多项式是:

        A的特征值为:

        当A为方阵时,有:

        B=I,中间为特征值组成的对角阵。根据定义,特征向量仅定义为恒定比例因子。在 SciPy 中,选择特征向量的比例因子使得:

        每个特征值对应的特征向量可以使用原始方程找到,然后可以找到与这些特征值相关的特征向量:

import numpy as np
from scipy import linalg

A = np.array([[1, 5, 2], [2, 4, 1], [3, 6, 2]])
la, v = linalg.eig(A)
lamda1, lamda2, lamda3 = la
print("la:", [lamda1, lamda2, lamda3])  # 特征值lamda

print("v1:", v[:, 0])  # 第一列
print("v2:", v[:, 1])  # 第二列
print("v3:", v[:, 2])  # 第三列
print("|v|^2:", np.sum(abs(v ** 2), axis=0))  # eigenvectors are unitary

结果:

la: [(7.957+0j), (-1.257+0j), (0.299+0j)]
v1: [-0.5297175  -0.44941741 -0.71932146]
v2: [-0.90730751  0.28662547  0.30763439]
v3: [ 0.28380519 -0.39012063  0.87593408]
|v|^2:[1. 1. 1.]
2、奇异值分解

        奇异值分解(SVD)可以被认为是特征值问题对非平方矩阵的扩展:

        示例:

 

import numpy as np
from scipy import linalg

A = np.array([[1, 2, 3], [4, 5, 6]])
M, N = A.shape

U, s, Vh = linalg.svd(A)
Sig = linalg.diagsvd(s, M, N)
U, Vh = U, Vh

print("U:", U)
print("Sig:", Sig)
print("Vh:", Vh)
print("check:", U.dot(Sig.dot(Vh)))  # check computation

结果:

U: [[-0.3863177   0.92236578]
 [-0.92236578 -0.3863177 ]]
Sig: [[9.508032   0.         0.        ]
 [0.         0.77286964 0.        ]]
Vh: [[-0.42866713 -0.56630692 -0.7039467 ]
 [-0.80596391 -0.11238241  0.58119908]
 [ 0.40824829 -0.81649658  0.40824829]]
check: [[1. 2. 3.]
 [4. 5. 6.]]
3、LU分解

        LU分解为M*N矩阵A作为:

        如果执行 LU 分解的目的是求解线性系统,linalg.lu_factor则应使用该命令,然后重复应用该命令 linalg.lu_solve来求解每个新右手边的系统。

4、Cholesky 分解

        Cholesky 分解是适用于 Hermitian 正定矩阵的 LU 分解的特例。分解A为:

        该命令linalg.cholesky计算 Cholesky 分解。为了使用 Cholesky 分解来求解方程组,还有一些linalg.cho_factor与 linalg.cho_solveLU 分解对应物类似的例程。

5、QR分解

        QR 分解(有时称为极分解)适用于任何M*N数组并找到一个M*M酉矩阵Q和M*N上梯形矩阵R, 这样:

        请注意,如果 SVDA已知,则可以找到 QR 分解。

        在 SciPy 中,独立算法用于查找 QR 和 SVD 分解。QR 分解的命令是linalg.qr。

6、Schur分解

        对于一个正方形M*N矩阵A,Schur 分解找到(不一定是唯一的)矩阵T和Z, 这样:

        该命令linalg.schur查找 Schur 分解,而该命令linalg.rsf2csf转换 和从真正的 Schur 形式到复杂的 Schur 形式。

7、插值分解

        scipy.linalg.interpolative包含用于计算矩阵的插值分解 (ID) 的例程。对于矩阵A因式分解:

        可以看scipy.linalg.interpolative了解详细用法。

参考:

1、SciPy 用户指南

SciPy User Guide — SciPy v1.8.0 Manual

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号