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
是右特征向量。vl
和vr
是可选的,仅当compute_left_eigenvectors
或compute_right_eigenvectors
分别为True
时才会包含。如果特征分解失败,则将为该批次元素返回充满 NaN 的数组。
- 返回类型: