linalg 是 linear algebra 的缩写,在许多科学计算库中,linalg 模块包含了用于执行线性代数操作的函数。这些操作包括矩阵乘法、矩阵分解、求解线性方程组、特征值和特征向量的计算等等。
在不同的库中,linalg 模块通常具有类似的功能。以下是一些常见的库和它们的 linalg 模块:
NumPy 的 numpy.linalg
import numpy as npA = 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 linalgA = 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 jnpA = 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 模块在实际应用中的一个典型例子。
