- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 创建和操作数组
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 遍历数组
- NumPy - 数组重塑
- NumPy - 数组连接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和操作
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步长
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组操作
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制和视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索和计数函数
- NumPy - 搜索数组
- NumPy - 数组并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 向数组追加值
- NumPy - 交换数组列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 估算缺失数据
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位数
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合操作
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 特征向量
什么是特征向量?
特征向量是与矩阵相关联的特殊向量,它提供有关矩阵属性的信息。
在线性代数的上下文中,如果A是一个方阵,则对应于特征值λ的特征向量v是一个非零向量,满足以下等式:
Av = λv
这意味着当矩阵A乘以向量v时,结果与用标量λ乘以向量v相同。
在 NumPy 中计算特征向量
NumPy 提供了numpy.linalg.eig()函数来计算方阵的特征值和特征向量。让我们通过一个例子来看看这个函数是如何工作的。
示例
在这个例子中,矩阵A的特征值是 3 和 2。相应的特征向量显示在输出中:
import numpy as np # Define a 2x2 matrix A = np.array([[4, -2], [1, 1]]) # Compute the eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(A) print("Eigenvalues:", eigenvalues) print("Eigenvectors:\n", eigenvectors)
numpy.linalg.eig()函数的输出包含两个数组:一个用于特征值,一个用于特征向量。
特征值数组包含矩阵的特征值,而特征向量数组的每一列都表示对应于相应特征值的特征向量:
Eigenvalues: [3. 2.] Eigenvectors: [[ 0.89442719 0.70710678] [ 0.4472136 -0.70710678]]
特征向量的性质
特征向量具有几个重要的性质,它们是:
- 线性:对应于不同特征值的特征向量是线性无关的。
- 可伸缩性:特征向量的任何标量倍数也是对应于相同特征值的特征向量。
- 不变性:特征向量在由矩阵定义的线性变换下保持不变(最多一个标量倍数)。
- 正交性:对于对称矩阵,对应于不同特征值的特征向量是正交的。
特征向量的应用
特征向量有许多应用,它们是:
- 主成分分析 (PCA):用于数据分析和机器学习中的降维。
- 稳定性分析:用于控制理论中分析系统的稳定性。
- 量子力学:用于求解薛定谔方程并找到系统的能级。
- 振动分析:用于工程中分析结构的固有频率。
- 图论:用于分析图和网络的属性。
示例:3x3 矩阵的特征向量
在下面的示例中,我们使用 NumPy 计算 3x3 矩阵的特征值和特征向量:
import numpy as np # Define a 3x3 matrix B = np.array([[1, 2, 3], [0, 1, 4], [5, 6, 0]]) # Compute the eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(B) print("Eigenvalues:", eigenvalues) print("Eigenvectors:\n", eigenvectors)
这将产生以下结果:
Eigenvalues: [-5.2296696 -0.02635282 7.25602242] Eigenvectors: [[ 0.22578016 -0.75769839 -0.49927017] [ 0.52634845 0.63212771 -0.46674201] [-0.81974424 -0.16219652 -0.72998712]]
对称矩阵和实特征向量
对称矩阵是指等于其转置的矩阵(即,A = AT)。对称矩阵在特征值和特征向量方面具有一些特殊的性质:
- 实特征值:对称矩阵的特征值始终是实数。
- 正交特征向量:对称矩阵对应于不同特征值的特征向量是正交的。
示例
让我们计算一个对称矩阵的特征值和特征向量:
import numpy as np # Define a symmetric matrix C = np.array([[4, 1, 1], [1, 4, 1], [1, 1, 4]]) # Compute the eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(C) print("Eigenvalues:", eigenvalues) print("Eigenvectors:\n", eigenvectors)
以下是上述代码的输出:
Eigenvalues: [6. 3. 3.] Eigenvectors: [[-0.57735027 -0.81649658 -0.15430335] [-0.57735027 0.40824829 -0.6172134 ] [-0.57735027 0.40824829 0.77151675]]
特征向量和对角化
如果方阵A可以写成以下形式,则称其为可对角化的:
A = PDP-1
其中,D是一个包含A的特征值的对角矩阵,P是一个其列是A的特征向量的矩阵。
示例
让我们看看如何使用 NumPy 对角化矩阵:
import numpy as np # Define a matrix D = np.array([[2, 0, 0], [1, 3, 0], [4, 5, 6]]) # Compute the eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(D) # Diagonal matrix of eigenvalues D_diag = np.diag(eigenvalues) # Reconstruct the original matrix reconstructed_D = eigenvectors @ D_diag @ np.linalg.inv(eigenvectors) print("Original matrix:\n", D) print("Reconstructed matrix:\n", reconstructed_D)
使用其特征值和特征向量成功地重建了原始矩阵,演示了对角化过程:
Original matrix: [[2 0 0] [1 3 0] [4 5 6]] Reconstructed matrix: [[2. 0. 0.] [1. 3. 0.] [4. 5. 6.]]
广告