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 在数据分析、机器学习与科研工程中不可或缺。

相关推荐
PhDTool8 分钟前
重构行业认知:ELN如何重构药物研发合作的信任链
人工智能·重构·信任链
程序员大雄学编程10 分钟前
定积分的几何应用(一):平面图形面积计算详解
开发语言·python·数学·平面·微积分
液态不合群11 分钟前
数字化转型改变了什么?从技术底层到业务本质的深度重构
前端·人工智能·低代码·重构
机器人行业研究员15 分钟前
人形机器人走猫步?关节力传感器成就小鹏IRON?
人工智能·机器学习·机器人·人机交互·六维力传感器·关节力传感器
小兵张健15 分钟前
Java + Spring 到 Python + FastAPI (一)
java·python·spring
杭州泽沃电子科技有限公司18 分钟前
在线监测系统:农药精细化工的“安全锁”与“效率引擎”
运维·人工智能·科技·物联网·化工
snakecy31 分钟前
自然语言处理(NLP)算法原理与实现--Part 1
人工智能·算法·自然语言处理
富唯智能39 分钟前
移动+协作+视觉=?复合型机器人重新定义智能产线
人工智能·工业机器人·复合机器人
mit6.82443 分钟前
[AI tradingOS] trader_manager.go | API集中控制_handleStartTrader
人工智能·区块链
说私域44 分钟前
开源链动2+1模式AI智能名片S2B2C商城小程序的价值及持续变现能力分析
人工智能·小程序·开源