【问题标题】:Solve Generalized Eigenvalue Problem in Numpy解决 Numpy 中的广义特征值问题
【发布时间】:2014-09-05 07:20:12
【问题描述】:

我正在寻找解决以下类型的问题:Aw = xBw 其中x 是标量(特征值),w 是特征向量,AB 是对称的 numpy 平方矩阵等维度。如果ABd x d,我应该能够找到d x/w 对。我将如何在 numpy 中解决这个问题?我正在查看 Scipy 文档,但没有找到任何我想要的东西。

【问题讨论】:

标签: python numpy scipy linear-algebra


【解决方案1】:

对于实对称或复 Hermitian 稠密矩阵,您可以使用scipy.linalg.eigh() 解决广义特征值问题。为避免提取所有特征值,您可以使用 subset_by_index 仅指定所需的特征值:

from scipy.linalg import eigh

eigvals, eigvecs = eigh(A, B, eigvals_only=False, subset_by_index=[0, 1, 2])

可以使用eigvals_only=True 仅获取特征值。

【讨论】:

  • 感谢您解决这个问题!乍一看,该函数的文档中的示例非常不清楚。
  • 这对我的目的来说是令人放心的,@Saullo,但我遇到了问题。据我估计,eigh 是 eig 的一个特化。但是,如果我将 eigh 和 eig 与相同的输入一起使用,我会得到 完全 不同的答案。还有其他区别吗?
  • @MikeSadler,您是否使用对称矩阵作为输入?
  • @SaulloG.P.Castro,我是 - 我在我的测试用例中检查它们,它们都是对称的和正定的。我现在已经回避了这个问题,但是否 eig 和 eigh 不一定以相同的顺序返回结果?
  • @MikeSadler 确实如此。根据文档,numpy.linalg.eigh 返回“按升序排列的特征值,每个都根据其多重性重复。” numpy.linalg.eig 没有预定义的特征值顺序
【解决方案2】:

你见过scipy.linalg.eig吗?来自documentation

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

此方法有可选参数b:

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

【讨论】:

  • OP中的问题是Aw = xBw
  • 那么,有什么问题吗? scipy.linalg.eig(a, b=None,...:参数 b:广义特征值问题中的右侧矩阵。默认为无,假设单位矩阵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
相关资源
最近更新 更多