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科学计 ...
随机推荐
- Angular Material 18+ 高级教程 – CDK Observers
前言 Observers 是 Angular Material 对游览器原生 MutationObserver 的上层封装.主要用于监听 add/remove Node. 不熟悉的朋友可以先看这篇 D ...
- EF Core – Get Started 搭建单侧环境
有时候想搭个环境做测试, 又记不住那些 command, 官方教程又啰嗦. git clone 模板又不太好管理, 索性记入在这里吧. 创建项目 dotnet new webapp -o Simple ...
- Python— 函数
函数定义: 示例: # 求 1 - n 的和 def sum(date): sum = 0 for i in range(1,date + 1): sum += i return sum # 函数调用 ...
- USB眼图常识
最近一段时间,项目需求,需要对USB眼图进行摸底测试.测试过程很简单,然而debug之路却很不简单.不简单往往也就意味着带来了不少收获. 示波器跨接在接收滤波器的输出端,调整示波器扫描周期,使示波器水 ...
- gadget驱动框架(一)
之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习.本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.12 ...
- 对3D图像进行裁剪
在对医学图像进行深度学习的过程中,我们会遇到图片过大,导致train的过程中网络会瘫痪,所以我们会考虑到对图像进行分割.比如一张155x240x240的图像,我们可以将他分割成一系列128x128x1 ...
- react -- 什么是jsx
概念:JSX 就是js和xml的缩写,表示在js代码中编写html模板结构,他是react中编写UI模板的方式 优势:html的声明式模板写法 js的可编程能力
- 云原生周刊:一文读懂 Pod 网络 | 2023.4.10
文章推荐 一文读懂 Pod 网络 这篇文章旨在帮助读者理解 Pod 网络的概念和原理.Pod 网络是 Kubernetes 中的一个重要概念,它描述了如何在一个集群中部署和运行应用程序. Pod 网络 ...
- OpenFunction v1.0.0 发布:集成 WasmEdge,支持 Wasm 函数和更完整的 CI/CD
OpenFunction 是一个开源的云原生 FaaS(Function as a Service,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发.今天,我们非常高兴地宣布 OpenFuncti ...
- Java中重写equals并重写hashcode方法的描述
1.两个对象的hashCode()相同,equals()不一定为true (1)重写equals()的同时,重写hashCode() a.定义Person类,私有属性name,age:有参构造,set ...