jax.lax.linalg.eig#

jax.lax.linalg.eig(x, *, compute_left_eigenvectors=True, compute_right_eigenvectors=True, use_magma=None)[源代码]#

一般矩阵的特征分解。

非对称特征分解仅在 CPU 和 GPU 上实现。在 GPU 上,默认实现直接在主机 CPU 上调用 LAPACK,但也可以使用基于 MAGMA 的实验性 GPU 实现。对于小型矩阵(小于 2048 左右),MAGMA 实现通常比等效的 LAPACK 实现慢,但对于较大的矩阵,它可能表现更好。

要启用 MAGMA 实现,您必须自己安装 MAGMA(有 Debian 和 conda-forge 包,或者您可以从源代码构建)。然后将 use_magma 参数设置为 True,或者将 jax_use_magma 配置变量设置为 "on""auto"

jax.config.update('jax_use_magma', 'on')

JAX 将尝试 dlopen 已安装的 MAGMA 共享库,如果找不到则会引发错误。要明确指定 MAGMA 库的路径,请将环境变量 JAX_GPU_MAGMA_PATH 设置为完整的安装路径。

如果 jax_use_magma 设置为 "auto",如果可以找到该库,并且输入矩阵足够大(>= 2048x2048),则将使用 MAGMA 实现。

参数:
  • x (ArrayLike) – 一批形状为 [..., n, n] 的方阵。

  • compute_left_eigenvectors (bool) – 如果为 true,将计算左特征向量。

  • compute_right_eigenvectors (bool) – 如果为 true,将计算右特征向量。

  • use_magma (bool | None | None) – 本地覆盖 jax_use_magma 标志。如果为 True,则使用 MAGMA 计算特征分解。如果为 False,则使用 LAPACK 在主机 CPU 上完成计算。如果为 None(默认),则行为由 jax_use_magma 标志控制。此参数仅在 GPU 上使用。

返回:

x 的特征分解,其形式为 (w, vl, vr) 的元组,其中 w 是特征值,vl 是左特征向量,vr 是右特征向量。vlvr 是可选的,仅当 compute_left_eigenvectorscompute_right_eigenvectors 分别为 True 时才会包含。

如果特征分解失败,则将为该批次元素返回充满 NaN 的数组。

返回类型:

list[Array]