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):高效数组运算

相关推荐
WangYan20222 小时前
Transformer模型/注意力机制/目标检测/语义分割/图神经网络/强化学习/生成式模型/自监督学习/物理信息神经网络等
人工智能·深度学习·transformer
疯狂的Alex2 小时前
C++23特性全解析:从编译器支持矩阵到多维数组性能优化实战
rpc·矩阵·c++23
金井PRATHAMA2 小时前
GraphRAG:引领自然语言处理进入深层语义分析新纪元
人工智能·自然语言处理·知识图谱
新子y2 小时前
《代码的“言外之意”:从词源学透彻理解编程》字符的“双重生活”:从Escape到Raw
笔记·python
aaaaaaaaaaaaay3 小时前
代码随想录算法训练营第五十一天|99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积
算法·深度优先
拓端研究室3 小时前
专题:2025年AI Agent智能体行业洞察报告|附110+份报告PDF、数据仪表盘汇总下载
人工智能
TH88863 小时前
大田作物四情监测系统:集物联网、大数据、人工智能等技术于一体的智慧农业管理系统
python
MATLAB代码顾问3 小时前
Python实现星雀优化算法(Nutcracker Optimizer Algorithm, NOA) (附完整代码)
大数据·python·excel