【Python标准库】数学相关的9个标准库
Python 数字与数学计算标准库详解
文章目录
- Python 数字与数学计算标准库详解
- 1. `math` —— 基础数学函数库
- 2. `cmath` —— 复数数学函数库
- 3. `decimal` —— 高精度十进制浮点计算
- 4. `fractions` —— 分数计算模块
- 5. `random` —— 伪随机数生成模块
- 6. `statistics` —— 统计分析工具
- 7. `itertools` —— 迭代器函数工具
- 8. `functools` —— 函数式编程工具集
- 9. `operator` —— 运算符函数接口
本文档系统介绍了 Python 中与 数学与数值计算相关的标准库。每一部分包含:库的简介、核心函数的分类与示例,以及常见用途。
其中,itertools
和functools
对Python的能力要求更高,计划之后专门写一篇文章来详细介绍一下。
1. math
—— 基础数学函数库
简介
math
模块是 Python 中用于处理标准数学运算的模块,包含对整数和浮点数进行操作的函数,如三角函数、对数、指数、舍入、常数等。
该模块仅支持实数类型(不支持复数),其所有函数基本都遵循 C 标准库中 math 函数的实现。
函数分类与示例
三角函数
import math
print(math.sin(math.pi / 2)) # 1.0
print(math.cos(0)) # 1.0
print(math.tan(math.pi / 4)) # 0.999999...
指数与对数
print(math.exp(1)) # 2.71828...
print(math.log(8, 2)) # 3.0
print(math.log10(100)) # 2.0
幂与根
print(math.sqrt(16)) # 4.0
print(math.pow(2, 3)) # 8.0
常用函数
print(math.floor(2.7)) # 2
print(math.ceil(2.1)) # 3
print(math.trunc(-2.9)) # -2
常数
print(math.pi) # 3.1415...
print(math.e) # 2.7182...
print(math.tau) # 6.2831...
应用场景
- 科学计算、几何计算
- 数值分析
- 游戏物理模拟中的三角计算
2. cmath
—— 复数数学函数库
简介
cmath
是 math
模块的复数扩展版本。它支持复数类型 complex
的运算,并返回复数结果。该模块的 API 与 math
类似,但输入输出为复数。
函数分类与示例
复数三角函数
import cmath
z = complex(1, 1)
print(cmath.sin(z))
print(cmath.cos(z))
幂与对数
print(cmath.exp(z))
print(cmath.log(z)) # 默认以e为底
print(cmath.sqrt(z))
极坐标函数
print(cmath.phase(z)) # 幅角
print(cmath.polar(z)) # 转极坐标
print(cmath.rect(1.414, 0.785)) # 极坐标转直角
应用场景
- 电路与信号处理中的复数计算
- 频域分析(如 FFT)
- 控制系统或量子力学建模
3. decimal
—— 高精度十进制浮点计算
简介
decimal
提供十进制浮点数运算(Decimal
类),相比 float
更精确,特别适合需要严格控制精度和舍入的领域(如金融、货币、审计)。
可配置全局精度、舍入策略、截断模式等。
示例与函数
基本用法
from decimal import Decimal, getcontext
getcontext().prec = 6
a = Decimal('1.2345')
b = Decimal('2.3456')
print(a + b) # 精确加法
配置精度
getcontext().prec = 4
print(Decimal('1') / Decimal('7')) # 精度可控
货币运算场景
price = Decimal('19.99')
qty = Decimal('3')
print(price * qty) # 无浮点误差
应用场景
- 财务与金融系统
- 科学计算中的精度控制
- 法规严格场合的数值处理(如税务)
4. fractions
—— 分数计算模块
简介
fractions
提供 Fraction
类用于有理数(即分数)表示,避免浮点精度误差。所有分数都会自动约简为最简形式。
支持与整数、浮点数、Decimal
混合计算,并保证精确表示。
示例与用法
创建与自动约分
from fractions import Fraction
a = Fraction(8, 12)
print(a) # 2/3
与整数/小数混合
print(Fraction('0.5')) # 1/2
print(Fraction(3) + Fraction(1, 4)) # 13/4
四则运算
a = Fraction(2, 3)
b = Fraction(1, 6)
print(a + b) # 5/6
print(a * b) # 1/9
应用场景
- 需要精确表示分数的教学系统
- 代数运算与解题平台
- 避免浮点误差的数学建模系统
5. random
—— 伪随机数生成模块
简介
random
模块实现了伪随机数生成器,用于生成整数、浮点数、序列选择等,支持种子设置以保证结果可复现。
不适合用于加密(请用 secrets
模块)。
函数分类与示例
基本生成函数
import random
print(random.random()) # [0.0, 1.0)
print(random.randint(1, 6)) # 含端点
print(random.uniform(1.5, 3.5))# 浮点范围
序列操作
items = ['a', 'b', 'c']
print(random.choice(items)) # 随机选一个
print(random.sample(items, 2))# 不放回抽样
random.shuffle(items) # 原地打乱
种子设置(可复现)
random.seed(42)
print(random.random()) # 固定输出
应用场景
- 游戏和模拟器中的随机性
- 抽样与洗牌算法
- 数据增强、随机试验
6. statistics
—— 统计分析工具
简介
statistics
是 Python 3.4 引入的模块,专门用于描述性统计分析。它提供了计算平均值、中位数、众数、方差、标准差、极差等常用统计量的函数,并基于真实样本进行精确推断。
该模块主要用于一维数值数据集合的基本描述性分析,不适合复杂多变量分析(推荐使用 numpy
, pandas
或 scipy.stats
)。
函数分类与示例
平均与中值
import statistics as statsnums = [1, 2, 2, 3, 4]
print(stats.mean(nums)) # 2.4
print(stats.median(nums)) # 2
print(stats.median_low(nums)) # 2
print(stats.median_high(nums))# 2
众数与极值
print(stats.mode(nums)) # 2
print(stats.multimode(nums)) # [2](支持多众数返回)
方差与标准差
data = [600, 470, 170, 430, 300]
print(stats.variance(data)) # 27130.0
print(stats.stdev(data)) # 164.71...
其他函数
pstdev
,pvariance
: 总体标准差与方差harmonic_mean
: 调和平均geometric_mean
: 几何平均(3.8+)
应用场景
- 数据分析初步统计摘要报告
- 教学与评估工具中的分布指标
- 作为
pandas
/numpy
的轻量补充
7. itertools
—— 迭代器函数工具
简介
itertools
是 Python 提供的用于高效处理迭代器的函数集合,允许以惰性方式进行笛卡尔积、排列、组合、无限迭代、过滤、累积等。适用于函数式编程、数据生成、排列组合问题。
所有函数都返回迭代器对象,适用于懒加载、大数据等场景。
函数分类与示例
无限迭代器
from itertools import count, cycle, repeat
for i in count(10): # 从10开始数if i > 13: breakprint(i)for i, x in zip(range(5), cycle('AB')):print(x) # A B A B A
组合与排列
from itertools import combinations, permutations, product
print(list(combinations('ABC', 2))) # [('A','B'), ('A','C'), ...]
print(list(permutations('AB', 2))) # [('A','B'), ('B','A')]
过滤与分组
from itertools import compress, filterfalse
data = range(10)
print(list(filterfalse(lambda x: x%2, data))) # [0, 2, 4, 6, 8]
累积与打包
from itertools import accumulate
print(list(accumulate([1,2,3,4]))) # [1, 3, 6, 10]
应用场景
- 枚举组合优化(例如背包问题)
- 懒加载批量数据处理
- 数据生成与自动构造结构(如嵌套循环)
8. functools
—— 函数式编程工具集
简介
functools
是 Python 提供的函数式编程工具模块,包含高阶函数、缓存(如 LRU)、偏函数、排序 key 提取、装饰器支持等。
它适合用于构建函数工厂、性能优化、控制函数行为。
常用函数
缓存优化
from functools import lru_cache@lru_cache(maxsize=128)
def fib(n):return n if n < 2 else fib(n-1) + fib(n-2)print(fib(30))
偏函数
from functools import partial
power2 = partial(pow, 2)
print(power2(5)) # 32 (2**5)
比较与排序辅助
cmp_to_key(func)
:将旧式比较函数包装为排序 keytotal_ordering
:只定义部分比较符号,即可自动补全
装饰器函数支持
wraps(func)
:保持原函数名、文档等信息
应用场景
- 构造复杂函数(如固定参数)
- 提高递归函数性能(如缓存)
- 函数工厂与闭包优化
9. operator
—— 运算符函数接口
简介
operator
模块将常用操作符(如加减乘除、比较、逻辑运算等)转换为函数形式,便于在高阶函数或函数式编程中使用。
此外还提供针对对象、字典、序列的高效访问器函数。
常用函数与示例
算术运算函数
import operator
print(operator.add(3, 5)) # 8
print(operator.mul(2, 4)) # 8
比较函数
print(operator.eq(3, 3)) # True
print(operator.lt(1, 2)) # True
属性与项访问器
from operator import itemgetter, attrgetter
lst = [('apple', 2), ('banana', 1)]
print(sorted(lst, key=itemgetter(1)))class Obj: val = 42
print(attrgetter('val')(Obj())) # 42
方法调用器
from operator import methodcaller
print(methodcaller('upper')('hello')) # 'HELLO'
应用场景
sorted()
、map()
、reduce()
中自定义 key- 替代
lambda
提高性能和可读性 - 结构化数据访问与抽取