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

相关推荐
woshihonghonga2 小时前
【Ubuntu 20.04升级python3.9后终端打不开的bug】
linux·开发语言·python
Gloria_niki2 小时前
基于 PyTorch 的 CIFAR-10 图像分类学习总结
python
PKNLP2 小时前
逻辑回归(Logistic Regression)
算法·机器学习·逻辑回归
、、、、南山小雨、、、、2 小时前
Pytorch强化学习demo
pytorch·深度学习·机器学习·强化学习
A尘埃3 小时前
线性代数(标量与向量+矩阵与张量+矩阵求导)
python·线性代数·矩阵
数据牧羊人的成长笔记3 小时前
python爬虫进阶版练习(只说重点,selenium)
开发语言·chrome·python
金井PRATHAMA3 小时前
语义网络(Semantic Net)对人工智能中自然语言处理的深层语义分析的影响与启示
人工智能·自然语言处理·知识图谱
Gerlat小智3 小时前
【手撕机器学习 03】从“生数据”到“黄金特征”:机器学习项目中价值最高的一步
人工智能·机器学习
云澈ovo3 小时前
稀疏化神经网络:降低AI推理延迟的量化压缩技术
人工智能·深度学习·神经网络