【线性代数】通俗理解特征向量与特征值

news2025/1/9 3:39:27

这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。

文章目录

  • 概念
  • 计算
  • 几何直观理解
  • 意义

概念

矩阵本身就是一个线性变换,对一个空间中的向量应用这个矩阵,一般几何表现上为向量发生了旋转、伸缩、反射等变换。如果存在一个向量,在变换前变换后方向不变,这样的向量就是这个矩阵的特征向量。

计算

按照上面定义,对于一个矩阵 A A A和一个向量 v v v A ⋅ v = λ v A \cdot v=\lambda v Av=λv,也就是向量 v v v在变换前后只有长度上的变化,没有方向上的变化,这样的向量 v v v和缩放倍数 λ \lambda λ分别叫做特征值和特征向量。

以下面这个矩阵A为例计算特征值:
[ 2 1 0 1 ] \begin{bmatrix} 2&1 \\ 0&1 \end{bmatrix} [2011]
A ⋅ v = λ v A \cdot v=\lambda v Av=λv
=> A ⋅ v = λ I v A \cdot v=\lambda I v Av=λIv
=> ( A − λ I ) ⋅ v = 0 (A - \lambda I) \cdot v=\mathbf{0} (AλI)v=0
=> A − λ I = 0 A - \lambda I=0 AλI=0
=>
[ 2 − λ 1 0 1 − λ ] = 0 \begin{bmatrix} 2-\lambda&1 \\ 0&1-\lambda \end{bmatrix}=0 [2λ011λ]=0
=> ( 2 − λ ) ( 1 − λ ) = 0 (2-\lambda)(1-\lambda)=0 (2λ)(1λ)=0
λ = 1 \lambda=1 λ=1 λ = 2 \lambda=2 λ=2

1) λ = 1 \lambda=1 λ=1时: ( A − λ I ) ⋅ v = 0 (A - \lambda I) \cdot v=\mathbf{0} (AλI)v=0
=>
[ 1 1 0 0 ] [ x y ] = [ 0 0 ] \begin{bmatrix} 1&1 \\ 0&0 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}= \begin{bmatrix} 0 \\ 0 \end{bmatrix} [1010][xy]=[00]
=>
x [ 1 0 ] + y [ 1 0 ] = [ 0 0 ] x \begin{bmatrix} 1\\ 0 \end{bmatrix}+ y \begin{bmatrix} 1\\ 0 \end{bmatrix}= \begin{bmatrix} 0 \\ 0 \end{bmatrix} x[10]+y[10]=[00]
=>
x + y = 0 x+y=0 x+y=0,所以(-1, 1)是 λ = 1 \lambda=1 λ=1时的一个特征向量。

2)同样的过程可以求出 λ = 2 \lambda=2 λ=2时(1, 0)是一个特征向量。

从计算过程还可以看出:特征值与特征向量的取值无关,只跟矩阵本身有关。且特征向量可以在该向量的所在直线上有无穷多个。

几何直观理解

上面计算的特征值和特征向量表明,在二维空间中对一个图形应用矩阵A的变换,该变换会将原图形在向量(1, -1)的方向维持不变,将向量(-1, 1)的方向拉伸2倍。

可视化:

import numpy as np
import matplotlib.pyplot as plt


# 定义一个二维椭圆
def generate_ellipse(num_points=100, a=2, b=1):
    theta = np.linspace(0, 2 * np.pi, num_points)
    x = a * np.cos(theta)
    y = b * np.sin(theta)
    return x, y


# 定义一个非对称变换矩阵
transformation_matrix = np.array([[2, 1],
                                  [0, 1]])

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(transformation_matrix)

# 生成原始椭圆
x, y = generate_ellipse()

# 将椭圆应用变换
xy_transformed = np.dot(transformation_matrix, np.array([x, y]))
x_transformed, y_transformed = xy_transformed

# 动态计算新的坐标轴范围
x_min, x_max = x_transformed.min(), x_transformed.max()
y_min, y_max = y_transformed.min(), y_transformed.max()
padding = 0.5  # 添加一些额外的空间

# 绘制原始和变换后的椭圆
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

# 原始椭圆
ax[0].plot(x, y, color='b')
ax[0].set_title('Original Ellipse')
ax[0].set_xlim(-2.5, 2.5)  # 紧凑的范围
ax[0].set_ylim(-1.5, 1.5)
ax[0].set_aspect('equal', 'box')

# 变换后的椭圆
ax[1].plot(x_transformed, y_transformed, color='r')
ax[1].set_title('Transformed Ellipse')
ax[1].set_xlim(x_min - padding, x_max + padding)
ax[1].set_ylim(y_min - padding, y_max + padding)
ax[1].set_aspect('equal', 'box')

# 绘制特征向量
origin = np.array([[0, 0], [0, 0]])  # 原点
ax[1].quiver(*origin, eigenvectors[0, :], eigenvectors[1, :], color=['g', 'g'], angles='xy', scale_units='xy', scale=1)

# 在图形旁边显示变换矩阵和特征值
textstr = f'Transformation Matrix:\n{transformation_matrix}\n\n'
textstr += f'Eigenvalues:\n{eigenvalues}\n\n'
textstr += f'Eigenvectors:\n{eigenvectors}'

props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
plt.gcf().text(0.5, 0.02, textstr, fontsize=10, bbox=props)

plt.tight_layout()
plt.show()

在这里插入图片描述
绿色的是两个特征向量。

从左边椭圆 => 右边椭圆的变化过程, 可以看成是先将整个椭圆沿着向量(1, 0)方向拉伸2倍,后将图形在向量(-1, 1)方向还原(因为在上一步两边拉伸的过程中,每一个原刻度处的圆弧上下距离都会被拉远,所以(-1, 1)方向也会被被拉长),所以整个图形表现为:两边拉长,且左低右高。

意义

特征向量和特征值的意义个人理解主要在于用来描述矩阵所表示的线性变换,也就是用特征向量和特征值来近似刻画矩阵的效果。

怎么理解这种近似刻画呢?个人理解是,无论是一个平面图形还是立体图形,以及更高维…,只要几个不变的方向拉伸效果确定了,那么其他方向也就确定了,可以这么确定的理由是:线性变换! 线性,也就是不会出现陡增或陡减,是一种“平缓”的过渡。

特征向量和特征值也可以被用来简化矩阵高次幂的计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-JVM详解

Java-JVM ①JVM概述 ❶基本介绍 JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点: Java 虚拟机基于二进制字节码执行,由一套字节码指…

【网络协议】开放式最短路径优先协议OSPF详解(三)

前言 在第一部分和第二部分,我们了解了OSPF操作背后的概念。在第三部分,我们将讨论多区域OSPF。我们将了解它与单区域OSPF的不同,并探讨其操作背后的各种概念。 【网络协议】开放式最短路径优先协议OSPF详解(一) 【…

【C语言】_指针与数组

目录 1. 数组名的含义 1.1 数组名与数组首元素的地址的联系 1.3 数组名与首元素地址相异的情况 2. 使用指针访问数组 3. 一维数组传参的本质 3.1 代码示例1:函数体内计算sz(sz不作实参传递) 3.2 代码示例2:sz作为实参传递 3…

android开发从入门进阶到高级学习资料集合

本文精心整理了Android开发相关的学习资料,涵盖入门、进阶、性能优化、博客、面试和书籍等多个维度,在这里分享给大家,欢迎收藏。 技术社区 开源中国 OSCHINA是国内顶尖的开源技术社区之一,自2008年成立以来,已汇聚超…

腾讯云更改用户为root

最近买了台99元一年的2核的云服务器,方便学习一些java开发中间件,以及部署一些项目。 1.设置root用户密码 sudo passwd root 2.修改配置文件 ll /etc | grep ssh cd /etc/ssh/ ls vim sshd_config 输入/PasswordAuthentication 寻找 输入:set nu 再按下…

联发科MTK6771/MT6771安卓核心板规格参数介绍

MT6771,也被称为Helio P60,是联发科技(MediaTek)推出的一款中央处理器(CPU)芯片,可运行 android9.0 操作系统的 4G AI 安卓智能模块。MT6771芯片采用了12纳米工艺制造,拥有八个ARM Cortex-A73和Cortex-A53核心,主频分别…

Milvus×全诊通:从导诊到智能超声,如何将人效比翻倍

AI与智慧医疗的结合已是未来发展的必然趋势。近年来,国家卫健委推崇智慧医疗和AI技术,如智能导诊、预问诊、辅助诊断等,以提高医疗服务效率和诊断准确性,改善患者就医体验。 全诊通是一家专注于医疗SaaS和人工智能的公司&#xff…

C#使用MVC框架创建WebApi服务接口

第一步,使用VS2019新建MVC-Web API应用程序 创建BridgeApi 第二步,运行将生成默认的示例网页,网页Url为 https://localhost:44361/home/index 右键 项目 添加 WebAPI控制器类 添加 我们可以看到App_Start目录下 有三个文件: BundleConfig.cs代表 捆绑文件的引用 有脚本文件…

跨年烟花C++代码

嘿&#xff0c;朋友们&#xff01;今天来给大家讲讲一段挺有意思的C代码呀&#xff0c;这段代码主要是用来实现一个烟花效果展示的程序哦&#xff0c;下面咱们一点点来看哈。 效果 1. 开头包含的那些头文件 #include <graphics.h> #include <conio.h> #include &…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具&#xff0c;故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著&#xff1b;出版时间&#xff1a;2023年3月 二、图像的分类、分割与检测任务区别 如图所示&#xff0c;这些更高阶的…

“深入浅出”系列之FFmpeg:(1)音视频开发基础

我的音视频开发大部分内容是跟着雷霄骅大佬学习的&#xff0c;所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示&#xff1a; FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据&#xff0c;然后SDL将YUV显示到电脑屏幕上…

日志服务 SQL 引擎全新升级

作者&#xff1a;戴志勇、顾汉杰&#xff08;执少&#xff09; SQL 作为 SLS 基础功能&#xff0c;每天承载了用户大量日志数据的分析请求&#xff0c;既有小数据量的快速查询&#xff08;如告警、即席查询等&#xff09;&#xff1b;也有上万亿数据规模的报表级分析。SLS 作为…

20250107在WIN10下使用无线ADB连接Andorid7.1.2

connected to 192.168.3.217:5555 adb shell 20250107在WIN10下使用无线ADB连接Andorid7.1.2 2025/1/7 18:12 缘起&#xff1a;公司买了一台6000-7000&#xffe5;的地面站【Andorid7.1.2】&#xff0c;需要通过ifconfig命令来获取其中的网络信息。 虽然系统是VERY非常的陈旧&a…

浙江省自然资源厅:基于“浙里办”的自然资源移动政务服务创新实践——“浙里自然资源”

摘 要&#xff1a;本文基于浙江省自然资源移动政务服务的创新实践&#xff0c;设计和实现“浙里自然资源”应用&#xff0c;依托浙江省省域空间治理数字化平台特有的架构基础&#xff0c;在提升功能性和可用性、加强运营力度、丰富服务内容等方面采取了管理举措和技术创新。通…

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式&#xff08;可选&#xff09; 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…

NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)

Accepted by NeurIPS 2024 文章链接&#xff1a;https://arxiv.org/pdf/2412.19806 项目链接&#xff1a;https://vitron-llm.github.io/ Github链接&#xff1a;https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型&#xff08;MLLM&…

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器&#xff0c;获得数据后&#xff0c;需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据&#xff0c;那么这个上位机是什么机器&#xff1f; 我们的笔记本电脑就可以当成上位机。 两个手…

用户界面软件02

基于表单的用户界面 在“基于表单的用户界面”里面&#xff0c;用户开始时选中某个业务处理&#xff08;模块&#xff09;&#xff0c;然后应用程序就使用一系列的表单来引导用户完成整个处理过程。大型机系统上的大部分用户界面都是这样子的。[Cok97]中有更为详细的讨论。 面…

YOLOv8/YOLOv11改进 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多种注意力机制

目录 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改进训练 前言 本篇文章将为大家介绍Ultralytics/YOLOv8/YOLOv11中常用注意力机制的添加&#xff0c;可以满足一些简单的涨点需求。本文仅写方法&#xff0c;原理不多讲解&#xff0c;需要可跳…