据我了解,scipy.linalg.eig
使用包装器scipy.lapack
计算矩阵的特征值和特征向量。为了做到这一点,eig
测试矩阵选择好的 LAPACK 函数。如果我错了,请纠正我。
当矩阵是奇异的并且算法不收敛时,Python 会引发错误并显示所使用的 LAPACK 函数的名称。我想知道eig
在计算矩阵的特征值时使用哪种算法。是否有任何我不知道的scipy
功能或选项显示使用的 LAPACK 功能?eig
据我了解,scipy.linalg.eig
使用包装器scipy.lapack
计算矩阵的特征值和特征向量。为了做到这一点,eig
测试矩阵选择好的 LAPACK 函数。如果我错了,请纠正我。
当矩阵是奇异的并且算法不收敛时,Python 会引发错误并显示所使用的 LAPACK 函数的名称。我想知道eig
在计算矩阵的特征值时使用哪种算法。是否有任何我不知道的scipy
功能或选项显示使用的 LAPACK 功能?eig
我认为没有办法在运行时使用scipy.linalg
.
根据您的目标,您可以:
scipy
,添加自定义输出(到您有兴趣监视的调用)并使用它而不是随附的输出。由于scipy
是开源的,通过一些手动工作,您可以获得所需的行为。在这种情况下,从源参考构建 scipy应该很有用。关于scipy.linalg.eig
:此功能适用于一般矩阵。如果您碰巧有一个对称/厄米特矩阵、带状矩阵或三对角矩阵,则应分别调用scipy.linalg.eigh
、scipy.linalg_eig_banded
或scipy.linalg.eigh_tridiagonal
。
您可以看到,scipy.linalg.eig
它不会对要使用的 LAPACK 函数进行任何选择:
geev, geev_lwork = get_lapack_funcs(('geev', 'geev_lwork'), (a1,))
因此,scipy.linalg.eig
将调用?geev。我认为它在物理上(就当前实现而言)没有能力调用其他任何东西。
相反,scipy.linalg.eigh
有更多的选择和灵活性,实际上可以从scipy
.
请注意,目前,您可能会看到scipy.linalg.LinAlgError的输出。此异常在线性代数函数包装器中引发,并且可能使用info
来自调用的 LAPACK 函数的输出。