Numpy本征值求解
技术背景
Numpy是一个Python库中最经常被用于执行计算任务的一个包,得益于其相比默认列表的高性能表现,以及易用性和可靠性,深受广大Python开发者的喜爱。这里介绍的是使用Numpy计算矩阵本征值和本征矩阵的方法。
求解问题
本征问题是求解形如:\(\mathbf{A}\mathbf{v}=\lambda\mathbf{v}\)的方程,其中\(\mathbf{A}\)为已知矩阵,\(\mathbf{v}\)为其中一个本征向量,\(\lambda\)是其中一个本征值。求解这个本征方程,就是找到所有符合条件的本征向量和对应的本征值。如果把所有的本征向量用一个本征矩阵\(\mathbf{V}\)来表示,那么就得到了一个特征值分解(EVD):
\]
其中\(\Sigma\)是由所有的特征值\(\lambda\)组成的对角矩阵。该形式的分解与另外一种SVD奇异值分解,在各种数据降维和稀疏化中经常会用到。
代码示例
这里用IPython做一个简单的功能演示:
In [1]: import numpy as np
In [2]: x = np.random.random((3,3)) # 生成一个随机3x3矩阵
In [3]: x
Out[3]:
array([[0.85976743, 0.98470964, 0.93286037],
[0.4988825 , 0.36451386, 0.68983566],
[0.01818865, 0.27647914, 0.86250282]])
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
Numpy本征值求解的更多相关文章
- python常用序列list、tuples及矩阵库numpy的使用
近期开始学习python机器学习的相关知识,为了使后续学习中避免编程遇到的基础问题,对python数组以及矩阵库numpy的使用进行总结,以此来加深和巩固自己以前所学的知识. Section One: ...
- 距离度量以及python实现(二)
接上一篇:http://www.cnblogs.com/denny402/p/7027954.html 7. 夹角余弦(Cosine) 也可以叫余弦相似度. 几何中夹角余弦可用来衡量两个向量方向的差异 ...
- 概率分布之间的距离度量以及python实现
1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...
- Python 余弦相似度与皮尔逊相关系数 计算
夹角余弦(Cosine) 也可以叫余弦相似度. 几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异. (1)在二维空间中向量A(x1,y1)与向量B(x2,y2 ...
- Numpy库进阶教程(一)求解线性方程组
前言 Numpy是一个很强大的python科学计算库.为了机器学习的须要.想深入研究一下Numpy库的使用方法.用这个系列的博客.记录下我的学习过程. 系列: Numpy库进阶教程(二) 正在持续更新 ...
- Numpy求解线性方程组
Numpy求解线性方程组 对于Ax=b,已知A和b,怎么算出x? 1. 引入包 2. 求解 验证
- numpy.argmax 用在求解混淆矩阵用
numpy.argmax numpy.argmax(a, axis=None, out=None)[source] Returns the indices of the maximum values ...
- 利用Numpy求解投资内部收益率IRR
一. 内部收益率和净现值 内部收益率(Internal Rate of Return, IRR)其实要和净现值(Net Present Value, NPV)结合起来讲.净现值指的是某个投资项目给公司 ...
- Numpy计算逆矩阵求解线性方程组
对于这样的线性方程组: x + y + z = 6 2y + 5z = -4 2x + 5y - z = 27 可以表示成矩阵的形式: 用公式可以表示为:Ax=b,其中A是矩阵,x和b都是列向量 逆矩 ...
- Python numpy 中常用的数据运算
Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.——<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...
随机推荐
- ASP.NET Core – Dependency Injection
前言 很久很久以前就写过了 Asp.net core 学习笔记 ( DI 依赖注入 ), 这篇只是整理一下而已. 参考 Using dependency injection in a .Net Cor ...
- JavaScript – Iterator
参考 阮一峰 – Iterator 和 for...of 循环 前言 es6 以后经常可以看到 for...of 的踪迹. 如果你细看会发现它挺神奇的. 不只是 Array 可以被 for...of, ...
- Spring —— 注解开发(依赖注入)
自动装配 引用类型 简单类型 加载properties文件
- 补天云全网独有技术和唯一实用工具:QT6框架QML源码保护工具应用 QML和JavaScript源码隐藏工具
如何保护和隐藏你的QT应用中的QML源代码?补天云全网独有技术和唯一实用工具:QT6框架QML源码保护工具应用 QML和JavaScript源码隐藏工具 简介 在通常的QT QML应用程序中,QML语 ...
- BOOT跳转APP,STM32F4正常,但是GD32F4起不来的问题
问题描述: stm32F4可以正常从BOOT跳转执行APP,到了GD32F4,卡死在APP程序的这里. 临时解决办法: APP程序内 把这两句代码都屏蔽掉就好了. 相关资料搜索: 最佳解决方案: ...
- 【赵渝强老师】利用Python完成数据分布特征的分析
在对数据的质量进行分析后,接下来就可以对数据的特征进行分析和计算,也可以通过绘制图表对数据的特征进行展示.数据的特征分析通过有以下几种方式:分布分析.对比分析.统计量分析.周期性分析.贡献度分析(帕累 ...
- Spring技术书的代码资源下载
我是清华社编辑,这些资源获得作者授权,免费提供给读者个人学习使用.禁止任何形式的商用. 二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链 ...
- 29. GIL全局解释器锁、信号量、线程池进程池
1. GIL全局解释器锁 1.1 概念 '''In CPython, the global interpreter lock, or GIL, is a mutex that prevents mul ...
- 基于 Nginx 的大型互联网集群架构与实战方案
1. Nginx 负载均衡基础配置 首先,搭建一个基础的 Nginx 负载均衡器,用于将流量分发到多个后端服务器上. 步骤 1.1:安装 Nginx 在每台要作为负载均衡器的服务器上,安装 Nginx ...
- day15-三大基本结构
顺序结构 Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行. 顺序结构是最简单的算法结构. 语句和语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组 ...