You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.linalg.eig返回的特征向量是否正交?如何获取正交归一化特征向量?

关于numpy.linalg.eig返回的特征向量正交性问题

1. 特征向量是否正交?

这个得分情况讨论:

  • 如果矩阵是正规矩阵(比如实对称矩阵、Hermitian矩阵、正交矩阵、酉矩阵等,满足$A A^H = A^H A$,实矩阵下就是$A A^T = A^T A$),numpy.linalg.eig返回的特征向量是正交的(实矩阵下是实正交,复矩阵下是酉正交)。
  • 如果矩阵是非正规矩阵(比如一般的非对称实矩阵),即使特征值互不相同,特征向量也只是线性无关,不一定正交;如果有重特征值,甚至可能不存在线性无关的特征向量(矩阵不可对角化)。

2. 点积结果约为0.0001,能否视为正交?

你遇到的这个情况要分场景判断:

  • 如果你的矩阵是正规矩阵(比如实对称),理论上特征向量应该严格正交,计算出的微小偏差(比如1e-16量级)完全是浮点数精度限制导致的,完全可以视为正交。
  • 如果点积结果是0.0001(1e-4)这个量级,建议检查两个问题:
    • 是不是点积计算方式错了?在numpy里,应该用np.dot(v0, v1)或者v0 @ v1(一维数组),如果是二维数组的列向量,要用v0.T @ v1,避免只做元素相乘没求和的情况。
    • 是不是矩阵本身不是正规矩阵?如果是非正规矩阵,不同特征值的特征向量本身就不正交,这个结果就是真实的非正交性,而非误差。

3. 如何获取正交且归一化的特征向量及对应特征值?

首先要明确:只有正规矩阵才能拥有正交的特征向量组,非正规矩阵不存在这样的特征向量组(因为正交特征向量组对应的矩阵一定是正规矩阵)。针对不同情况:

情况1:矩阵是正规矩阵(比如实对称)

推荐使用numpy.linalg.eigh而非eig:

  • eigh专门针对Hermitian矩阵(实对称矩阵是特例),返回的特征向量是严格正交归一化的,而且数值稳定性比eig更好,计算精度更高。
  • 示例代码:
import numpy as np

# 实对称矩阵示例
A = np.array([[1, 2], [2, 1]])
eigenvalues, eigenvectors = np.linalg.eigh(A)

# 验证正交性:点积接近0
print(np.dot(eigenvectors[:,0], eigenvectors[:,1]))  # 输出约为1e-16量级的极小值
# 验证归一化:模长为1
print(np.linalg.norm(eigenvectors[:,0]))  # 输出1.0

情况2:矩阵是非正规矩阵

如果矩阵是非正规矩阵,不存在正交的特征向量组,若需要正交向量组,可以用Schur分解:

  • numpy.linalg.schur会返回正交矩阵Q和上三角矩阵T,满足$A = Q T Q^T$(实矩阵)。Q的列是正交归一化的,但这些列不是特征向量,只是Schur向量。
  • 示例代码:
import numpy as np

# 非对称非正规矩阵示例
A = np.array([[1, 1], [0, 2]])
Q, T = np.linalg.schur(A)

# 验证Q的列正交
print(np.dot(Q[:,0], Q[:,1]))  # 输出约为0
# 验证Q的列归一化
print(np.linalg.norm(Q[:,0]))  # 输出1.0

注意:Schur向量不是特征向量,只是正交向量组;如果必须要特征向量,非正规矩阵的特征向量无法做到正交,只能接受它们线性无关的性质。


内容的提问来源于stack exchange,提问作者kinder chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:12:32