0. NumPy 系列教程:科学计算与数据分析实战

NumPy 系列教程:科学计算与数据分析实战

在 Python 科学计算和数据分析的生态系统中,NumPy(Numerical Python) 扮演着基础而关键的角色。它提供了高效的多维数组对象,以及丰富的数值计算函数库。本系列教程共 12 篇,系统讲解了 NumPy 的基础安装、数组操作、数学函数、统计函数、线性代数、广播机制、高效数据处理与图像处理等内容。

01. NumPy入门与数组创建
02. NumPy数组属性详解:形状、维度与数据类型
03. NumPy 文件数据读写:高效的数据存储与加载
04. NumPy 数组索引与切片:高效访问与操作数组
05. NumPy 数组的合并、分割与重塑
06. NumPy 数学函数:高效数值计算
07. NumPy 统计函数详解
08. NumPy 随机数生成与概率分布
09. NumPy 线性代数:矩阵运算与科学计算基础
10. NumPy 广播机制(Broadcasting):高效数组运算
11. NumPy 高效数据处理与优化
12. NumPy 数据分析与图像处理入门


1. NumPy 入门与数组创建

1.1 NumPy 安装与导入

bash 复制代码
pip install numpy
python 复制代码
import numpy as np

1.2 一维数组创建

python 复制代码
import numpy as np

a = np.array([1, 2, 3, 4, 5])   # 从列表创建
b = np.arange(0, 10, 2)         # 等差序列 [0, 2, 4, 6, 8]
c = np.linspace(0, 1, 5)        # 等间距序列 [0. , 0.25, 0.5 , 0.75, 1.]

1.3 多维数组创建

python 复制代码
matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])   # 二维数组
cube = np.ones((3, 3, 3))        # 三维数组,全1

1.4 特殊数组

python 复制代码
zeros = np.zeros((2, 3))          # 全零数组
ones = np.ones((3, 2))			  # 全一数组
identity = np.eye(3)              # 单位矩阵
full = np.full((2, 2), 7)         # 全7数组
rand = np.random.rand(2, 2)		  # 随机数组

2. NumPy 数组属性详解

  • 形状arr.shape
  • 维度arr.ndim
  • 大小arr.size
  • 数据类型arr.dtype
python 复制代码
a = np.arange(12).reshape(3, 4)
print(a.shape)   # (3, 4) 形状
print(a.ndim)    # 2 维度
print(a.size)    # 12 元素个数
print(a.dtype)   # int64 数据类型

3. NumPy 文件数据读写

3.1 保存数组

python 复制代码
np.save('array.npy', arr)
np.savez('arrays.npz', arr1=arr, arr2=arr2d)

3.2 读取数组

python 复制代码
arr_loaded = np.load('array.npy')
arrays_loaded = np.load('arrays.npz')
print(arr_loaded)
print(arrays_loaded['arr1'])

3.3 文本文件读写

python 复制代码
np.savetxt('data.txt', arr, delimiter=',')
arr_txt = np.loadtxt('data.txt', delimiter=',')

4. NumPy 数组索引与切片

4.1 基础索引

python 复制代码
a = np.array([[10, 20, 30],
              [40, 50, 60]])
print(a[1, 2])  # 60

4.2 基础切片

python 复制代码
print(a[:1, 1:])  # [[20 30]]

4.3 布尔操作

python 复制代码
print(a[a > 30])  # [40, 50, 60]

4.4 花式操作

python 复制代码
print(a[[0, 1], [1, 2]])  # [20, 60]

5. NumPy 数组的合并、分割与重塑

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

# 合并
print(np.vstack((a, b)))
# [[1 2]
#  [3 4]
#  [5 6]]
print(np.hstack((a, b.T)))
# [[1 2 5]
#  [3 4 6]]

# 分割
print(np.split(np.arange(9), 3))
# [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]

# 重塑
print(a.reshape(4, 1))
# [[1]
#  [2]
#  [3]
#  [4]]

6. NumPy 数学函数

支持广播和向量化操作

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

print(np.sqrt(x))   # 开方
print(np.exp(x))    # 指数
print(np.log(x))    # 对数
print(np.sin(x))    # 三角函数

7. NumPy 统计函数

数据分析基础必备工具

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

print(np.mean(a))   # 均值
print(np.median(a)) # 中位数
print(np.var(a))    # 方差
print(np.std(a))    # 标准差

8. NumPy 随机数生成

python 复制代码
rng = np.random.default_rng()

print(rng.random(3))           # [0.1, 0.5, 0.9]
print(rng.integers(0, 10, 5))  # 0-9 随机整数
print(rng.normal(0, 1, 5))     # 标准正态分布

9. NumPy 线性代数

  • 矩阵乘法np.dot(A,B)A@B
  • 转置A.T
  • 逆矩阵np.linalg.inv(A)
  • 行列式np.linalg.det(A)
  • np.linalg.matrix_rank(A)
  • 特征值与特征向量np.linalg.eig(A)
  • 解线性方程组np.linalg.solve(A,b)
python 复制代码
A = np.array([[1, 2],
              [3, 4]])

print(np.linalg.det(A))      # 行列式
print(np.linalg.inv(A))      # 逆矩阵
eigvals, eigvecs = np.linalg.eig(A)
print(eigvals)               # 特征值

10. NumPy 广播机制

  • 标量与数组运算自动广播
  • 不同形状数组自动扩展
  • 高维数组广播
  • 广播可用于向量化计算、数据归一化等
python 复制代码
a = np.array([[1], [2], [3]])  # (3,1)
b = np.array([10, 20, 30])     # (3,)
print(a + b)
# [[11 21 31]
#  [12 22 32]
#  [13 23 33]]

11. NumPy 高效数据处理与优化

  • 向量化:避免循环
  • ufuncsnp.sin(), np.exp()
  • 布尔索引:快速筛选修改
  • 内存与数据类型优化float32, int8
python 复制代码
import time
import numpy as np

N = 10_000_000
a = list(range(N))
b = list(range(N))

# Python 列表
start = time.time()
c = [a[i] + b[i] for i in range(N)]
time_python = time.time() - start
print("Python:", time_python)

# NumPy 向量化
a_np = np.arange(N)
b_np = np.arange(N)
start = time.time()
c_np = a_np + b_np
time_numpy = time.time() - start
print("NumPy:", time_numpy)

# 时间差之比
print("时间比 (Python / NumPy):", time_python / time_numpy)

Python: 1.1597342491149902

NumPy: 0.0395660400390625

时间比 (Python / NumPy): 29.311355090628616

NumPy 数组运算速度往往比 Python 列表快几十倍甚至上百倍。


12. NumPy 数据分析与图像处理入门

12.1 数据分析

python 复制代码
scores = np.array([[90,85,70],[75,80,85],[60,70,65],[95,90,100]])
print(np.mean(scores, axis=1))  # 学生平均
print(np.mean(scores, axis=0))  # 课程平均

12.2 图像处理

翻转、裁剪、亮度调整均可通过数组操作完成

python 复制代码
from skimage import data
import matplotlib.pyplot as plt

img = data.astronaut()  # 彩色图像
gray = img.mean(axis=2)  # 灰度化
plt.imshow(gray, cmap='gray')
plt.show()

13. 总结

本文系统介绍了 NumPy 的核心功能与应用,涵盖数组创建、属性、索引切片、文件操作、数学与统计函数、随机数、线性代数、广播机制及高效数据处理。作为 Python 科学计算的基石,NumPy 在数据分析、机器学习与科研工程中不可或缺。

相关推荐
罗西的思考7 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab8 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab8 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
孟健9 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
格砸9 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云9 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny8659 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔10 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能
smallyoung10 小时前
AgenticRAG:智能体驱动的检索增强生成
人工智能
_skyming_10 小时前
OpenCode 如何做到结果不做自动质量评估,为什么结果还不错?
人工智能