我们提供安全,免费的手游软件下载!
Numpy是Python库中最常用于执行计算任务的一个包,具有高性能表现、易用性和可靠性,因此深受广大Python开发者的喜爱。本文将介绍如何使用Numpy包来计算矩阵的本征值和本征向量。
本征问题是指解决形如: \(\mathbf{A}\mathbf{v}=\lambda\mathbf{v}\) 的方程,其中 \(\mathbf{A}\) 为已知矩阵, \(\mathbf{v}\) 为其中一个本征向量, \(\lambda\) 是其中一个本征值。求解这个本征方程,就是找到所有符合条件的本征向量和对应的本征值。若将所有的本征向量用一个本征矩阵 \(\mathbf{V}\) 来表示,则可得到一个特征值分解(EVD)。
特征值分解(EVD)的形式为: \(\mathbf{A} = \mathbf{V} \Sigma \mathbf{V}^{-1}\) ,其中 \(\Sigma\) 是由所有的特征值 \(\lambda\) 组成的对角矩阵。该形式的分解在各种数据降维和稀疏化中经常会用到,与另外一种SVD奇异值分解有着密切关联。
为了演示如何使用Numpy计算矩阵本征值和本征矩阵,以下将进行一个简单的IPython示例:
In [1]: import numpy as np
In [2]: x = np.random.random((3,3)) # 生成一个随机3x3矩阵
In [4]: vals, vecs = np.linalg.eig(x) # 求解本征值和本征矩阵
In [5]: vals # 得到的本征值
Out[5]: array([-0.17227694, 1.59456701, 0.66449404])
In [6]: vecs # 得到的本征列向量构成的矩阵
Out[6]:
array([[-0.57443338, 0.86571324, -0.83117188],
[ 0.79327234, 0.46077017, -0.28656555],
[-0.20185463, 0.19552861, 0.47648032]])
In [7]: np.allclose(vecs @ np.diag(vals) @ np.linalg.inv(vecs), x) # 测试本征值分解EVD
Out[7]: True
In [13]: np.allclose(x @ vecs[:, 0], vecs[:, 0] * vals[0]) # 测试本征向量
Out[13]: True
In [14]: np.allclose(x @ vecs[:, 1], vecs[:, 1] * vals[1]) # 测试本征向量
Out[14]: True
In [15]: np.allclose(x @ vecs[:, 2], vecs[:, 2] * vals[2]) # 测试本征向量
Out[15]: True
EVD分解后的矩阵与原矩阵保持一致。在这个示例中,逆矩阵的运算使用了Numpy的矩阵求逆函数
numpy.linalg.inv
。
本文介绍了如何使用Numpy进行矩阵特征值求解和特征值分解问题。Numpy的eig特征求解函数可以直接输出给定矩阵的所有特征值,以及对应的所有特征向量构成的矩阵。再使用Numpy的矩阵求逆函数,即可得到相关矩阵的EVD特征值分解。
本文首发链接为: https://www.cnblogs.com/dechinphy/p/numpy-eig.html
作者ID:DechinPhy
更多原创文章: https://www.cnblogs.com/dechinphy/
如欲给作者买杯咖啡,请点击: https://www.cnblogs.com/dechinphy/gallery/image/379634.html
热门资讯