linalg
是 linear algebra
的缩写,在许多科学计算库中,linalg
模块包含了用于执行线性代数操作的函数。这些操作包括矩阵乘法、矩阵分解、求解线性方程组、特征值和特征向量的计算等等。
在不同的库中,linalg
模块通常具有类似的功能。以下是一些常见的库和它们的 linalg
模块:
NumPy 的 numpy.linalg
import numpy as np
A = np.array([[1, 2], [3, 4]])
# 计算矩阵的逆
A_inv = np.linalg.inv(A)
# 计算矩阵的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
# 计算矩阵的奇异值分解
U, S, V = np.linalg.svd(A)
SciPy 的 scipy.linalg
from scipy import linalg
A = np.array([[1, 2], [3, 4]])
# 计算矩阵的逆
A_inv = linalg.inv(A)
# 计算矩阵的特征值和特征向量
eigenvalues, eigenvectors = linalg.eig(A)
# 计算矩阵的奇异值分解
U, S, V = linalg.svd(A)
JAX 的 jax.numpy.linalg
import jax.numpy as jnp
A = jnp.array([[1, 2], [3, 4]])
# 计算矩阵的逆
A_inv = jnp.linalg.inv(A)
# 计算矩阵的特征值和特征向量
eigenvalues, eigenvectors = jnp.linalg.eig(A)
# 计算矩阵的奇异值分解
U, S, V = jnp.linalg.svd(A)
常见的 linalg
函数
-
inv
:计算矩阵的逆。A_inv = np.linalg.inv(A)
-
eig
:计算矩阵的特征值和特征向量。eigenvalues, eigenvectors = np.linalg.eig(A)
-
svd
:计算矩阵的奇异值分解。U, S, V = np.linalg.svd(A)
-
det
:计算矩阵的行列式。det_A = np.linalg.det(A)
-
qr
:计算矩阵的 QR 分解。Q, R = np.linalg.qr(A)
-
norm
:计算矩阵或向量的范数。norm_A = np.linalg.norm(A)
linalg
模块的用途
linalg
模块在数据科学、机器学习、物理模拟和工程计算中广泛应用,因为许多问题都可以归结为线性代数问题。例如,求解线性方程组、数据降维、图像处理、最小二乘拟合等。
示例:使用 linalg
计算矩阵的 SVD
下面是一个使用 jnp.linalg.svd
计算矩阵奇异值分解的完整示例:
import jax.numpy as jnp
# 创建一个示例矩阵
A = jnp.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 计算奇异值分解
U, S, V = jnp.linalg.svd(A, full_matrices=False)
print("U 矩阵:\n", U)
print("奇异值:\n", S)
print("V 矩阵:\n", V)
# 构造对角矩阵 S
S_diag = jnp.diag(S)
# 重构矩阵 A
A_reconstructed = jnp.dot(U, jnp.dot(S_diag, V))
print("重构矩阵 A:\n", A_reconstructed)
以上示例展示了如何使用 jnp.linalg.svd
对矩阵进行奇异值分解,并使用分解结果重构原始矩阵。这是 linalg
模块在实际应用中的一个典型例子。