当前位置: 首页 > news >正文

【Python标准库】数学相关的9个标准库

Python 数字与数学计算标准库详解

文章目录

  • Python 数字与数学计算标准库详解
    • 1. `math` —— 基础数学函数库
    • 2. `cmath` —— 复数数学函数库
    • 3. `decimal` —— 高精度十进制浮点计算
    • 4. `fractions` —— 分数计算模块
    • 5. `random` —— 伪随机数生成模块
    • 6. `statistics` —— 统计分析工具
    • 7. `itertools` —— 迭代器函数工具
    • 8. `functools` —— 函数式编程工具集
    • 9. `operator` —— 运算符函数接口

本文档系统介绍了 Python 中与 数学与数值计算相关的标准库。每一部分包含:库的简介、核心函数的分类与示例,以及常见用途。

其中,itertoolsfunctools对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 —— 复数数学函数库

简介
cmathmath 模块的复数扩展版本。它支持复数类型 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, pandasscipy.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):将旧式比较函数包装为排序 key
  • total_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 提高性能和可读性
  • 结构化数据访问与抽取

相关文章:

  • 八大排序之直接插入排序
  • ELK日志系统
  • Kubernetes控制平面组件:高可用 APIServer
  • 详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
  • 定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
  • 【Linux】软件管理机制和软件安装
  • 软件测试--自动化测试1
  • 【操作系统原理02】进程的描述与控制
  • 基于机器学习 LSTM 算法的豆瓣评论情感分析系统
  • matlab论文图一的地形区域图的球形展示Version_1
  • 【Matlab】中国东海阴影立体感地图
  • 梅施CPQ + AI:开启智能AI与报价软件的新潮流
  • 大模型Rag - 文本分块
  • libevent的bufferevent测试用例和使用方法(附带源码)
  • 腾讯wxg企业微信 后端开发一面
  • 基于Ubuntu2504部署OpenStack E版
  • uv:重新定义Python开发效率的下一代工具链
  • GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?
  • Android TTY设备调用流程和简单分析
  • Vue3 本地打包启动白屏解决思路!! !
  • 美伊第二轮核问题间接谈判结束,伊方称“结果是建设性的”
  • 明查|美军“杜鲁门”号航空母舰遭胡塞武装打击已退役?
  • 美国国务卿:乌克兰问题谈判不能一直停滞不前
  • 夜读丨“看看世界”本身就是一种意义
  • 外交部介绍中印尼“2+2”机制首次部长级会议将讨论的议题
  • 释新闻|特朗普喊话鲍威尔早点走人,美国总统能否解雇美联储主席?