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]