scipy.linalg.eigvalsh¶
- scipy.linalg.eigvalsh(a, b=None, lower=True, overwrite_a=False, overwrite_b=False, turbo=True, eigvals=None, type=1, check_finite=True, subset_by_index=None, subset_by_value=None, driver=None)[源代码]¶
解决复厄米特矩阵或实对称矩阵的标准或广义特征值问题。
查找特征值数组
w
阵列的数量a
,在哪里b
是正定的,使得对于每个特征值λ(w的第i个条目)及其特征向量vi(v的第i列)满足:a @ vi = λ * b @ vi vi.conj().T @ a @ vi = λ vi.conj().T @ b @ vi = 1
在标准问题中,假设b是单位矩阵。
- 参数
- a(M,M)类数组
将计算其特征值的复厄米特或实对称矩阵。
- b(M,M)array_like,可选
中的复厄米特或实对称正定矩阵。如果省略,则假定为单位矩阵。
- lower布尔值,可选
相关数组数据是取自
a
并且,如果适用的话,b
。(默认值:较低)- overwrite_a布尔值,可选
是否覆盖中的数据
a
(可能会提高性能)。默认值为False。- overwrite_b布尔值,可选
是否覆盖中的数据
b
(可能会提高性能)。默认值为False。- type整型,可选
对于一般问题,此关键字指定要为其解决的问题类型
w
和v
(只接受1、2、3作为可能的输入)::1 => a @ v = w @ b @ v 2 => a @ b @ v = w @ v 3 => b @ a @ v = w @ v
对于标准问题,将忽略此关键字。
- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- subset_by_index可迭代,可选
如果提供,此两元素可迭代定义所需特征值的开始和结束索引(升序和0索引)。为了仅返回第二小到第五小的特征值,
[1, 4]
是使用的。[n-3, n-1]
返回最大的三个。仅适用于“evr”、“evx”和“gvx”驱动程序。这些条目通过以下方式直接转换为整数int()
。- subset_by_value可迭代,可选
如果提供,则此两元素迭代器定义半开间隔
(a, b]
如果有的话,只返回这些值之间的特征值。仅适用于“evr”、“evx”和“gvx”驱动程序。使用np.inf
对于不受约束的末端。- 驱动程序:字符串,可选
定义应使用哪个LAPACK驱动程序。对于标准问题,有效选项为“ev”、“evd”、“evr”、“evx”,对于一般问题(其中b不是无问题),有效选项为“gv”、“gvd”、“gvx”。请参阅的注释部分
scipy.linalg.eigh
。- turbo布尔值,可选
Deprecated by ``driver=gvd`` option 。对特征值计算没有显著影响,因为不需要任何特征向量。
1.5.0 版后已移除.
- eigvals元组(lo,hi),可选
Deprecated by ``subset_by_index`` keyword 。要返回的最小和最大(按升序)特征值和相应特征向量的索引:0<=lo<=hi<=M-1。如果省略,则返回所有特征值和特征向量。
1.5.0 版后已移除.
- 退货
- w(n,)ndarray
The
N
(1<=N<=M
) selected eigenvalues, in ascending order, each repeated according to its multiplicity.
- 加薪
- LinAlgError
如果特征值计算不收敛,则发生错误,或者b矩阵不是正定的。请注意,如果输入矩阵不对称或不是厄米特矩阵,则不会报告错误,但结果将是错误的。
参见
eigh
对称/厄米特阵列的特征值和右特征向量
eigvals
一般阵列的特征值
eigvals_banded
对称/厄米特带状矩阵的特征值
eigvalsh_tridiagonal
对称/厄米特三对角阵的特征值
注意事项
此函数不检查输入数组是否为厄米特/对称的,以便仅用其上/下三角形部分表示数组。
此函数用作单行速记,用于
scipy.linalg.eigh
使用选项eigvals_only=True
得到特征值而不是特征向量。在这里,它被保留下来,作为一种遗留的便利。使用Main函数进行完全控制并稍微有点 Python 效应可能是有益的。示例
有关更多示例,请参见
scipy.linalg.eigh
。>>> from scipy.linalg import eigvalsh >>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]]) >>> w = eigvalsh(A) >>> w array([-3.74637491, -0.76263923, 6.08502336, 12.42399079])