当前位置: 首页 > news >正文

【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量

【Python】Numpy–np.linalg.eig()求对称矩阵的特征值和特征向量

文章目录

  • 【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量
    • 1. 介绍
    • 2. API
    • 3. 代码示例

1. 介绍

特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。

  • 需要注意:只有对可对角化矩阵才可以施以特征分解。
  • 当方阵的行列式不为0时,它才可以特征分解。
  • 对称矩阵的行列式不为0。故实对称矩阵 A 可被分解成:
    A=QΛQTA = QΛ Q^T A=QΛQTΛ是特征值构成的对角矩阵,Q为特征向量构成的矩阵(每列为一个特征向量)。

2. API

Numpy提供了丰富的API:

  • 求矩阵的特征值和特征向量;
  • 求矩阵的行列式
  • 求方阵的逆
import numpy as np
# 计算特征值和特征向量
x, V = np.linalg.eig(A)# 计算矩阵的行列式
det = np.linalg.det(A)# 计算方阵的逆
A_inv = np.linalg.inv(A)

3. 代码示例

import numpy as npA = np.array([[0, 1, 2, 3],[1, 0, 3, 1],[2, 3, 0, 2],[3, 1, 2, 0]])x, V = np.linalg.eig(A)V_inv = np.linalg.inv(V)print('A的行列式', np.linalg.det(A))# 注意这里:且不可使用‘*’做乘法(因为*优先使用点乘,点乘不成立,才会进行矩阵乘法)
B = np.matmul(np.matmul(V, np.diag(x)), (V_inv))print('特征值x: \n', x)print('特征向量V: \n', V)print('V_T: \n', V.T)print('V_inv: \n', V_inv)print('B: \n', B)-----------------------------输出-----------------------------------
A的行列式 9.000000000000009
特征值x:[ 6.05572176  0.15432761 -3.         -3.21004937]
特征向量V:[[-5.03020107e-01 -4.75446017e-01 -7.07106781e-01 -1.44643895e-01][-4.38300211e-01  6.51958757e-01 -2.36695808e-17 -6.18742842e-01][-5.49394638e-01  3.50502424e-01 -1.50578103e-16  7.58494287e-01][-5.03020107e-01 -4.75446017e-01  7.07106781e-01 -1.44643895e-01]]
V_T:[[-5.03020107e-01 -4.38300211e-01 -5.49394638e-01 -5.03020107e-01][-4.75446017e-01  6.51958757e-01  3.50502424e-01 -4.75446017e-01][-7.07106781e-01 -2.36695808e-17 -1.50578103e-16  7.07106781e-01][-1.44643895e-01 -6.18742842e-01  7.58494287e-01 -1.44643895e-01]]
V_inv:[[-5.03020107e-01 -4.38300211e-01 -5.49394638e-01 -5.03020107e-01][-4.75446017e-01  6.51958757e-01  3.50502424e-01 -4.75446017e-01][-7.07106781e-01 -8.99464510e-16  8.86986655e-16  7.07106781e-01][-1.44643895e-01 -6.18742842e-01  7.58494287e-01 -1.44643895e-01]]
B:
[[ 1.71102595e-15  1.00000000e+00  2.00000000e+00  3.00000000e+00][ 1.00000000e+00  9.30160211e-16  3.00000000e+00  1.00000000e+00][ 2.00000000e+00  3.00000000e+00 -2.20312258e-16  2.00000000e+00][ 3.00000000e+00  1.00000000e+00  2.00000000e+00  1.88043220e-15]]
http://www.lryc.cn/news/24203.html

相关文章:

  • 医疗床头卡(WIFI方案)
  • [YOLO] yolo博客笔记汇总(自用
  • Linux 常用 API 函数
  • 【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现
  • 奇瑞x华为纯电智选车来了,新版ADS成本将大幅下降
  • 机器学习的特征归一化Normalization
  • 程序员看过都说好的资源网站,看看你都用过哪些?
  • Win11的两个实用技巧系列之设置系统还原点的方法、安全启动状态开启方法
  • 【Linux】项目的自动化构建-make/makefile
  • 【Redis学习2】Redis常用数据结构与应用场景
  • 踩了大坑:https 证书访问错乱
  • 大数据技术之Hive(四)分区表和分桶表、文件格式和压缩
  • 环形缓冲区(c语言)
  • 创建自助服务知识库的指南
  • 分层测试(1)分层测试是什么?【必备】
  • 开源ZYNQ AD9361软件无线电平台
  • 第四阶段-12关于Spring Security框架,RBAC,密码加密原则
  • JPA——Date拓展之Calendar
  • 一文吃透 Spring 中的 AOP 编程
  • Apple主推的智能家居是什么、怎么用?一篇文章带你从零完全入门 HomeKit
  • SpringCloud系列知识快速复习 -- part 1(SpringCloud基础知识,Docker,RabbitMQ)
  • 2023上半年北京/上海/广州/深圳NPDP产品经理认证报名
  • 面试半年,总结了1000道2023年Java架构师岗面试题
  • 通过MySQL驱动拦截器实现执行sql耗时计算
  • 易基因|独家分享:高通量测序后的下游实验验证方法——DNA甲基化篇
  • java基础系列(七) 同步和异步理解
  • 吉林大学 程序设计基础 2022级 OJ期末考试 2.23
  • 【项目实战】SpringMVC拦截器实战 - 自定义拦截器防止重复提交
  • C++ STL:容器 Container
  • urllib之urlopen和urlretrieve的headers传入以及parse、urlparse、urlsplit的使用