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

相关推荐
人工智能培训1 分钟前
具身智能如何让智能体理解物理定律?
人工智能·多模态学习·具身智能·ai培训·人工智能工程师·物理定律
lili-felicity2 分钟前
CANN加速Stable Diffusion文生图推理:从UNet优化到内存复用
人工智能·aigc
哈__2 分钟前
CANN加速语音合成TTS推理:声学模型与声码器优化
人工智能
哈__3 分钟前
CANN加速VAE变分自编码器推理:潜在空间重构与编码解码优化
人工智能·深度学习·重构
美狐美颜SDK开放平台7 分钟前
多终端适配下的人脸美型方案:美颜SDK工程开发实践分享
人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
m0_736919109 分钟前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
哈__10 分钟前
CANN加速Image Captioning图像描述生成:视觉特征提取与文本生成优化
人工智能
getapi11 分钟前
实时音视频传输与屏幕共享(投屏)
python
禁默14 分钟前
Ops-Transformer深入:CANN生态Transformer专用算子库赋能多模态生成效率跃迁
人工智能·深度学习·transformer·cann
杜子不疼.16 分钟前
基于CANN GE图引擎的深度学习模型编译与优化技术
人工智能·深度学习