jax.scipy.linalg.eigh

目录

jax.scipy.linalg.eigh#

jax.scipy.linalg.eigh(a: ArrayLike, b: ArrayLike | None = None, lower: bool = True, eigvals_only: Literal[False] = False, overwrite_a: bool = False, overwrite_b: bool = False, turbo: bool = True, eigvals: None = None, type: int = 1, check_finite: bool = True) tuple[Array, Array][source]#
jax.scipy.linalg.eigh(a: ArrayLike, b: ArrayLike | None = None, lower: bool = True, *, eigvals_only: Literal[True], overwrite_a: bool = False, overwrite_b: bool = False, turbo: bool = True, eigvals: None = None, type: jax.scipy.linalg.eigh(a: ArrayLike, b: ArrayLike | None, lower: bool, eigvals_only: Literal[True], overwrite_a: bool = False, overwrite_b: bool = False, turbo: bool = True, eigvals: None = None, type: int = 1, check_finite: bool = True) Array
jax.scipy.linalg.eigh(a: ArrayLike, b: ArrayLike | None = None, lower: bool = True, eigvals_only: bool = False, overwrite_a: bool = False, overwrite_b: bool = False, turbo: bool = True, eigvals: None = None, type: int = 1, check_finite: bool = True) Array | tuple[Array, Array]

计算厄米特矩阵的特征值和特征向量。

JAX 实现 scipy.linalg.eigh().

参数:
  • a – 形状为 (..., N, N) 的厄米特输入数组。

  • b – 形状为 (..., N, N) 的可选厄米特输入。如果指定,则计算广义特征值问题。

  • lower – 如果为 True(默认值),则仅访问输入矩阵的下半部分。否则仅访问上半部分。

  • eigvals_only – 如果为 True,则仅计算特征值。如果为 False(默认值),则计算特征值和特征向量。

  • type

    如果指定了 b,则 type 指定要计算的广义特征值问题的类型。将 (λ, v) 表示为特征值、特征向量对

    • type = 1 求解 a @ v = λ * b @ v (默认值)

    • type = 2 求解 a @ b @ v = λ * v

    • type = 3 求解 b @ a @ v = λ * v

  • eigvals – 一个 (low, high) 元组,指定要计算的特征值。

  • overwrite_a – JAX 不使用。

  • overwrite_b – JAX 不使用。

  • turbo – JAX 不使用。

  • check_finite – JAX 不使用。

返回值:

如果 eigvals_only 为 False,则为数组元组 (eigvals, eigvecs),否则为数组 eigvals

  • eigvals: 形状为 (..., N) 的数组,包含特征值。

  • eigvecs: 形状为 (..., N, N) 的数组,包含特征向量。

另请参阅

示例

计算一个简单的 2x2 矩阵的标准特征值分解。

>>> a = jnp.array([[2., 1.],
...                [1., 2.]])
>>> eigvals, eigvecs = jax.scipy.linalg.eigh(a)
>>> eigvals
Array([1., 3.], dtype=float32)
>>> eigvecs
Array([[-0.70710677,  0.70710677],
       [ 0.70710677,  0.70710677]], dtype=float32)

特征向量是正交的。

>>> jnp.allclose(eigvecs.T @ eigvecs, jnp.eye(2), atol=1E-5)
Array(True, dtype=bool)

解满足特征值问题。

>>> jnp.allclose(a @ eigvecs, eigvecs @ jnp.diag(eigvals))
Array(True, dtype=bool)