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 安装与导入

pip install numpy
import numpy as np

1.2 一维数组创建

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 多维数组创建

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

1.4 特殊数组

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
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 保存数组

np.save('array.npy', arr)
np.savez('arrays.npz', arr1=arr, arr2=arr2d)

3.2 读取数组

arr_loaded = np.load('array.npy')
arrays_loaded = np.load('arrays.npz')
print(arr_loaded)
print(arrays_loaded['arr1'])

3.3 文本文件读写

np.savetxt('data.txt', arr, delimiter=',')
arr_txt = np.loadtxt('data.txt', delimiter=',')

4. NumPy 数组索引与切片

4.1 基础索引

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

4.2 基础切片

print(a[:1, 1:])  # [[20 30]]

4.3 布尔操作

print(a[a > 30])  # [40, 50, 60]

4.4 花式操作

print(a[[0, 1], [1, 2]])  # [20, 60]

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

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 数学函数

支持广播和向量化操作

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 统计函数

数据分析基础必备工具

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 随机数生成

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)
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 广播机制

  • 标量与数组运算自动广播
  • 不同形状数组自动扩展
  • 高维数组广播
  • 广播可用于向量化计算、数据归一化等
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
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 数据分析

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 图像处理

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

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

download


13. 总结

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

posted @ 2025-10-11 22:02  yxysuanfa  阅读(27)  评论(0)    收藏  举报