Skip to content

NumPy - 线性代数

线性代数是数学的一个基础分支,对于许多科学和工程领域至关重要,包括机器学习、物理模拟、数据分析和计算机图形学。NumPy 提供了一个专门的模块 numpy.linalg,提供了一整套用于执行常见线性代数运算的函数。

虽然 scipy.linalg 通常提供更高级且可能更稳健的实现(特别是对于边缘情况或特定矩阵类型),但 numpy.linalg 涵盖了许多标准任务所需的基本例程。

以下是 numpy.linalg 中一些关键函数:

函数描述
numpy.dot(a, b)计算两个数组的点积。对于二维数组,它等同于矩阵乘法。对于一维数组,它是内积。
numpy.linalg.multi_dot([...])在单个函数调用中高效计算两个或多个数组的点积。
numpy.vdot(a, b)计算两个向量(扁平化数组)的点积,正确处理复共轭。
numpy.inner(a, b)计算两个数组的内积。对于向量,它类似于 dot。对于更高维度,沿最后一个轴求乘积的和。
numpy.outer(a, b)计算两个向量的外积。
numpy.matmul(a, b) or a @ b计算两个数组的矩阵乘积。这是进行矩阵乘法的首选函数/运算符(自 Python 3.5 起)。
numpy.linalg.det(a)计算方阵的行列式。
numpy.linalg.slogdet(a)计算数组行列式的符号和对数。
numpy.linalg.solve(a, b)求解线性标量方程组 a * x = b 中的 x,其中 a 是方阵。
numpy.linalg.inv(a)计算方阵的乘法逆矩阵。
numpy.linalg.pinv(a)计算矩阵的 Moore-Penrose 伪逆矩阵(对非方阵或奇异矩阵有用)。
numpy.linalg.eig(a)计算方阵的特征值和右特征向量。
numpy.linalg.svd(a)计算矩阵的奇异值分解 (SVD)。
numpy.linalg.qr(a)计算矩阵的 QR 分解。
numpy.linalg.norm(a)计算矩阵或向量范数。

示例:矩阵乘法和解线性方程组

Section titled “示例:矩阵乘法和解线性方程组”
import numpy as np
# Define two matrices
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Matrix multiplication using the @ operator (preferred)
C = A @ B
print(f"Matrix A:\n{A}")
print(f"Matrix B:\n{B}")
print(f"Matrix product A @ B:\n{C}")
# Alternative using numpy.matmul()
C_matmul = np.matmul(A, B)
print(f"Matrix product using np.matmul():\n{C_matmul}")
# Define a system of equations: Ax = b
# 2x + 3y = 8
# 4x + 1y = 6
a_eq = np.array([[2, 3], [4, 1]])
b_eq = np.array([8, 6])
# Solve for x (which contains [x, y])
x_sol = np.linalg.solve(a_eq, b_eq)
print(f"\nSystem matrix a_eq:\n{a_eq}")
print(f"System vector b_eq: {b_eq}")
print(f"Solution x: {x_sol}")
# Verify the solution
print(f"Verification (a_eq @ x_sol): {a_eq @ x_sol}")

输出:

Matrix A:
[[1 2]
[3 4]]
Matrix B:
[[5 6]
[7 8]]
Matrix product A @ B:
[[19 22]
[43 50]]
Matrix product using np.matmul():
[[19 22]
[43 50]]
System matrix a_eq:
[[2 3]
[4 1]]
System vector b_eq: [8 6]
Solution x: [1. 2.]
Verification (a_eq @ x_sol): [8. 6.]

应用:线性代数在机器学习(例如,在 PCA、线性回归、神经网络等算法中)、物理学(求解微分方程组)、计算机图形学(变换)和优化问题等领域至关重要。

深入了解 numpy.linalg 文档 中的功能。