📅  最后修改于: 2023-12-03 15:38:05.428000             🧑  作者: Mango
NumPy 是 Python 中常用的科学计算库,它提供了许多实用的函数和工具,能够方便地进行矩阵计算和线性代数运算。在计算机科学中,特征值和特征向量是矩阵的重要特性,对于许多应用都有重要的意义。本文将介绍如何使用 NumPy 计算给定方阵的特征值和右特征向量。
在矩阵代数中,特征值和特征向量是指当一个方阵作用于一个向量时,使得结果向量与原向量在同一直线上的非零向量和对应的标量值。设 $A$ 是一个 $n\times n$ 的实方阵,$\lambda\in\mathbb{R}$,$v\in\mathbb{R}^n$,则当$Av=\lambda v$时,称 $\lambda$ 是 $A$ 的一个 特征值,$v$ 是 $A$ 的对应于 $\lambda$ 的一个 特征向量。
右特征向量是指满足 $Av=\lambda v$ 的非零向量 $v$;左特征向量是指满足 $v^T A = \lambda v^T$ 的非零向量 $v^T$。两个向量的转置分别为右特征向量和左特征向量,两个向量线性无关时称为对角化。
NumPy 中提供了 linalg.eig()
函数,用于计算矩阵的特征值和特征向量。该函数的输入为一个方阵,输出为一个包括特征值和右特征向量的元组。使用该函数可以方便地求出一个方阵的特征值和右特征向量。
下面是一个使用 NumPy 计算特征值和右特征向量的示例代码片段:
import numpy as np
# 定义一个 3x3 的方阵
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 使用 numpy.linalg.eig() 函数计算特征值和右特征向量
eigvals, eigvecs = np.linalg.eig(A)
# 输出特征值和右特征向量
print("特征值:", eigvals)
print("右特征向量:", eigvecs)
运行上述代码,将输出矩阵 A
的特征值和右特征向量。
需要注意的是,输出的特征向量是按列排列的,也就是说,在输出结果中,每一列对应于一个特征向量。
特征值: [ 1.61168440e+01 -1.11684397e+00 -1.30367773e-15]
右特征向量: [[-0.23197069 -0.78583024 0.40824829]
[-0.52532209 -0.08675134 -0.81649658]
[-0.8186735 0.61232757 0.40824829]]
从上面的结果中可以看出,矩阵 A
的三个特征值分别为 16.116844,-1.1168439 和 $-1.30367773\times10^{-15}$。其中,第一个特征向量对应的特征值是 16.116844;第二个特征向量对应的特征值是 -1.1168439;第三个特征向量对应的特征向量是一个很小的值,可以近似视为 0。
右特征向量是一个 $3\times3$ 的矩阵,其中每一列是一个特征向量,分别对应于上述的三个特征值。我们可以使用这些特征向量来对矩阵 A
进行正交对角化,从而得到对角矩阵。