求解Numpy中的广义特征值问题

And*_*ham 7 python numpy linear-algebra scipy

我正在寻找一个类型的问题: Aw = xBw其中x是标量(特征值),w是一个特征向量,A并且B是对称的,相等维度的方形numpy矩阵.我应该能够找到dX/W对,如果ABd x d.我怎么能在numpy中解决这个问题?我正在查看Scipy文档而没有找到任何我想要的东西.

Sau*_*tro 7

看来你需要scipy.linalg.eigh()解决这个广义的特征值问题:

from scipy.linalg import eigh

eigvals, eigvecs = eigh(A, B, eigvals_only=False)
Run Code Online (Sandbox Code Playgroud)

你会发现这eigvecs是一个复杂的ndarray,所以也许你必须使用eigvecs.real......

在相同的模块中,您eigvalsh()可能会对您的情况执行速度更快,但它不会返回特征向量.

  • @MikeSadler 确实如此。根据文档,“numpy.linalg.eigh”返回“按升序排列的特征值,每个特征值根据其多重性重复。” “numpy.linalg.eig”没有预定义的特征值顺序 (3认同)
  • @SaulloG.P.Castro,我是 - 我在我的测试用例中检查它们,它们都是对称的和正定的。我现在已经回避了这个问题,但是 eig 和 eigh 是否一定会以相同的顺序返回结果? (2认同)

Rom*_*siy 6

你见过scipy.linalg.eig吗?从文档:

求解方阵的普通或广义特征值问题.

此方法具有可选参数b:

scipy.linalg.eig(a, b=None, ...
Run Code Online (Sandbox Code Playgroud)
b : (M, M) array_like, optional
Right-hand side matrix in a generalized eigenvalue problem. 
          Default is None, identity matrix is assumed.
Run Code Online (Sandbox Code Playgroud)

  • 所以有什么问题?`scipy.linalg.eig(a, b=None,...`: 参数 b: _广义特征值问题中的右侧矩阵。默认为无,假设单位矩阵。_ (3认同)