9. NumPy 线性代数:矩阵运算与科学计算基础

NumPy 线性代数:矩阵运算与科学计算基础

线性代数是科学计算、数据分析和机器学习的核心基础。矩阵运算、向量点积、矩阵求逆、特征值分解等操作在实际问题中无处不在。NumPy 提供了强大的线性代数工具,能够高效处理大规模矩阵运算。

本文将系统讲解 NumPy 线性代数 的核心功能:

  1. 向量与矩阵的基本操作
  2. 点积、内积与外积
  3. 矩阵转置与逆矩阵
  4. 行列式与秩
  5. 特征值与特征向量
  6. 解线性方程组

1. 向量与矩阵的基本操作

在 NumPy 中,向量和矩阵都使用数组表示:

python 复制代码
import numpy as np

# 向量
v = np.array([1, 2, 3])

# 矩阵
A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])

print("向量 v:", v)
print("矩阵 A:\n", A)

向量 v: 1 2 3

矩阵 A:

\[1 2

3 4\]

  • NumPy 数组既可以表示向量,也可以表示矩阵。
  • 使用二维数组表示矩阵,操作方便且效率高。

2. 点积、内积与外积

2.1 向量点积

python 复制代码
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

dot_product = np.dot(x, y)
print("点积:", dot_product)  # 32

点积: 32

2.2 外积

python 复制代码
outer_product = np.outer(x, y)
print("外积:\n", outer_product)

外积:

\[ 4 5 6

8 10 12

12 15 18\]

2.3 矩阵乘法

python 复制代码
C = np.dot(A, B)
print("矩阵乘法 A·B:\n", C)

矩阵乘法 A·B:

\[19 22

43 50\]

注意:* 表示逐元素乘法,而 np.dot() 或 @ 表示矩阵乘法。

python 复制代码
print("逐元素乘法 A*B:\n", A*B)
print("矩阵乘法 A@B:\n", A@B)

逐元素乘法 A*B:

\[ 5 12

21 32\]

矩阵乘法 A@B:

\[19 22

43 50\]


3. 矩阵转置与逆矩阵

矩阵的转置和求逆是线性代数中的基本操作。

3.1 矩阵转置

python 复制代码
print("矩阵 A 转置:\n", A.T)

矩阵 A 转置:

\[1 3

2 4\]

3.2 矩阵求逆

python 复制代码
A_inv = np.linalg.inv(A)
print("矩阵 A 的逆矩阵:\n", A_inv)

# 验证 A·A_inv 是否为单位矩阵
print("A·A_inv:\n", A @ A_inv)

矩阵 A 的逆矩阵:

\[-2. 1.

1.5 -0.5\]

A·A_inv:

\[1.0000000e+00 0.0000000e+00

8.8817842e-16 1.0000000e+00\]

提示:只有方阵且行列式非零矩阵才可求逆。


4. 行列式与秩

行列式与秩反映了矩阵的重要性质。

4.1 行列式

python 复制代码
det_A = np.linalg.det(A)
print("矩阵 A 行列式:", det_A)

矩阵 A 行列式: -2.0000000000000004

4.2 矩阵秩

python 复制代码
rank_A = np.linalg.matrix_rank(A)
print("矩阵 A 秩:", rank_A)

矩阵 A 秩: 2

行列式为零意味着矩阵不可逆,而矩阵秩则反映了其行或列的线性独立性。


5. 特征值与特征向量

特征分解是 PCA、机器学习、物理建模中常用的工具。

python 复制代码
eig_vals, eig_vecs = np.linalg.eig(A)
print("特征值:", eig_vals)
print("特征向量:\n", eig_vecs)

特征值: -0.37228132 5.37228132

特征向量:

\[-0.82456484 -0.41597356

0.56576746 -0.90937671\]

通过特征分解,可以提取矩阵最重要的方向性信息。


6. 解线性方程组

线性方程组 Ax = b 可以直接使用 np.linalg.solve 求解:

python 复制代码
A = np.array([[3, 1],
              [1, 2]])
b = np.array([9, 8])

x = np.linalg.solve(A, b)
print("方程组解:", x)

# 验证 Ax 是否等于 b
print("验证 Ax:", A @ x)

方程组解: 2. 3.

验证 Ax: 9. 8.

相比手动计算逆矩阵再相乘,np.linalg.solve 更快更稳定。


7. 小结

NumPy 线性代数模块提供了强大且高效的矩阵运算工具,包括:

  • 矩阵运算:点积、外积、矩阵乘法
  • 矩阵特性:转置、逆矩阵、行列式、秩
  • 特征分解:特征值与特征向量
  • 线性方程组求解 :np.linalg.solve

这些工具是科学计算、机器学习和数据分析中的核心基础,掌握它们可以为后续算法实现和数值模拟打下坚实基础。


上一篇:8. NumPy 随机数生成与概率分布

下一篇:10. NumPy 广播机制(Broadcasting):高效数组运算

相关推荐
晨间晓4 小时前
一张图片主要是什么颜色?用 OpenCV 做图片主色提取工具
人工智能·opencv·计算机视觉
xsd202411184 小时前
把整套 AI 工作台装进 U 盘:开箱即用的本地短视频生产方案
人工智能
kaixin_啊啊4 小时前
【零基础学AI】第 10 章课后练习与答案
人工智能
智能相对论4 小时前
STEPX Neo:AI终端的“初代iPhone时刻”
人工智能·ios·iphone
xier_ran5 小时前
【infra之路】AI 编译器学习笔记(七):Linalg 与 Tiling——把迭代空间切成块
人工智能·笔记·学习
高洁015 小时前
世界模型环境预测与内在表征基础原理
人工智能·深度学习·机器学习·transformer·tornado
沪上企服通5 小时前
税制变更前的影子账套回归:代账 pipeline 怎么在规则上线前先跑一遍
人工智能·数据挖掘·回归
赶路人儿5 小时前
简述LLM 中的GCG 攻击
人工智能
m0_587383005 小时前
碰碰好评卡功能落地实战 从需求梳理到上线部署全流程实操指南
java·linux·服务器·前端·javascript·vue.js·人工智能
lzqrzpt5 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件