NumPy快速计算矩阵特征值与特征向量
·
python — numpy计算矩阵特征值,特征向量
目录
一、特征值与特征向量
假设我们有一个n阶的矩阵A以及一个实数λ,使得我们可以找到一个非零向量x,满足:
Ax=λx
如果能够找到的话,就称λ是矩阵A的特征值,非零向量x是矩阵A的特征向量。
将上式变形为 (A-λE)x=0,这是一个齐次线性方程组。由于x 是非零向量,该方程组有非零解的充要条件是系数矩阵的行列式为 0,即:|A - λ E| = 0
二、数学演算
示例:矩阵的特征值和特征向量的解题过程及结果。




单位化方式:

三、linalg 模块介绍
numpy.linalg 模块提供了一组用于线性代数的基础函数。这些函数涵盖了矩阵分解、矩阵特征值与特征向量、求解线性系统等操作。线性代数是科学计算中一个重要的部分,NumPy通过numpy.linalg模块为用户提供高效且功能齐全的线性代数工具。
常用的 numpy.linalg 函数概述:
linalg.inv: 计算矩阵的逆矩阵。linalg.det: 计算矩阵的行列式。linalg.eig: 计算矩阵的特征值与特征向量。linalg.solve: 解决线性方程组。linalg.norm: 计算矩阵或向量的范数。
四、代码讲解
1、计算方阵的特征值与右特征向量,使用 NumPy 的线性代数模块 np.linalg.eig
import numpy as np
# 定义目标方阵
x = np.array([
[1, -3, 3],
[3, -5, 3],
[6, -6, 4]
])
# 计算特征值(e)和右特征向量(v)
eigenvalues, eigenvectors = np.linalg.eig(x)
# 打印结果
print("特征值(eigenvalues):")
print(eigenvalues)
print("\n右特征向量(eigenvectors,每一列对应一个特征值的特征向量):")
print(eigenvectors)
计算特征值与特征向量:np.linalg.eig(x) 会返回两个结果:
第一个结果 eigenvalues 是特征值数组(按特定顺序排列);
第二个结果 eigenvectors 是右特征向量矩阵(每一列对应一个特征值的单位特征向量)。
2、计算一般矩阵的特征值,使用 Python 的 NumPy 库 np linalg eigvals(x)函数。
import numpy as np
# 定义一个一般矩阵(这里以 3×3 方阵为例,可替换为任意方阵)
x = np.array([
[1, -3, 3],
[3, -5, 3],
[6, -6, 4]
])
# 计算矩阵的特征值
eigenvalues = np.linalg.eigvals(x)
# 打印特征值结果
print("矩阵的特征值为:")
print(eigenvalues)
计算特征值:np.linalg.eigvals(matrix) 会直接返回矩阵的所有特征值(包括实数、复数特征值)。
3、计算复埃尔米特矩阵或实对称矩阵的特征值和特征向量,可使用 NumPy的 np.linalg.eigh 函数
import numpy as np
# 构造复埃尔米特矩阵(2×2 示例)
a_hermitian = np.array([
[3 + 0j, 1 - 2j],
[1 + 2j, 2 + 0j]
], dtype=complex)
# 计算特征值和特征向量
w_herm, v_herm = np.linalg.eigh(a_hermitian)
# 打印结果
print("\n=== 复埃尔米特矩阵的特征值 ===")
print(w_herm)
print("\n=== 复埃尔米特矩阵的特征向量(列向量为单位特征向量) ===")
print(v_herm)
# 验证特征关系:A·v ≈ λ·v
is_valid_herm = np.allclose(np.dot(a_hermitian, v_herm), w_herm * v_herm)
print("\n验证 A·v ≈ λ·v 的结果:", is_valid_herm) # 应输出 True
np.linalg.eigh(matrix)返回两个结果:- 第一个是特征值数组(按从小到大排序);
- 第二个是特征向量矩阵(每一列对应一个特征值的单位特征向量)。
- 验证步骤利用了特征值的定义:若 λ是 A 的特征值,x是对应特征向量,则 Ax=λx
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)