器→工具, 编程语言

Python标准库之数字和数学模块

钱魏Way · · 11 次浏览

numbers:数字抽象基类

numbers 模块是 Python 标准库中的一个模块,用于定义和操作数字类型的抽象基类。它提供了对各种数值类型(如整数、浮点数、复数等)的抽象定义,使得你可以编写与数字类型相关的代码而无需考虑具体的数字实现细节。

numbers.Number

Number 是所有数字类型的抽象基类。它是所有具体数字类型(如整数、浮点数、复数等)的父类。

示例:

from numbers import Number

print(issubclass(int, Number))   # 输出: True
print(issubclass(float, Number)) # 输出: True
print(issubclass(complex, Number)) # 输出: True

numbers.Integral

Integral 是表示整数的抽象基类。它继承自 Number 类,表示所有的整数类型。

示例:

from numbers import Integral

print(issubclass(int, Integral))  # 输出: True
print(issubclass(float, Integral)) # 输出: False

numbers.Real

Real 是表示所有实数(包括整数和浮点数)的抽象基类。它继承自 Number 类,并且是 Integral 和 Fraction 的基类。

示例:

from numbers import Real

print(issubclass(int, Real))   # 输出: True
print(issubclass(float, Real)) # 输出: True
print(issubclass(complex, Real)) # 输出: False

numbers.Fraction

Fraction 是表示分数的抽象基类。它继承自 Real 类,表示所有分数类型。Python 的 fractions.Fraction 类是这个基类的一个具体实现。

示例:

from numbers import Fraction

print(issubclass(Fraction, Real))  # 输出: True

numbers.Complex

Complex 是表示复数的抽象基类。它继承自 Number 类,表示所有复数类型。Python 的内置 complex 类型是这个基类的具体实现。

示例:

from numbers import Complex

print(issubclass(complex, Complex))  # 输出: True
print(issubclass(int, Complex))      # 输出: False

实现自定义数字类型

如果你需要实现一个自定义的数字类型,你可以继承 numbers.Number 及其子类,并实现相应的方法。例如,下面的代码定义了一个自定义的数字类型 MyNumber,并实现了一些基本的操作。

from numbers import Number

class MyNumber(Number):
    def __init__(self, value):
        self._value = value
    
    def __float__(self):
        return float(self._value)
    
    def __int__(self):
        return int(self._value)
    
    def __repr__(self):
        return f"MyNumber({self._value})"

# 使用自定义数字类型
n = MyNumber(10)
print(float(n))  # 输出: 10.0
print(int(n))    # 输出: 10

decimal:十进制浮点运算

decimal 模块是 Python 标准库中的一个模块,提供了对浮点数进行精确计算的功能。它特别适用于需要高精度和准确度的场景,例如金融计算和科学计算。decimal 模块支持任意精度的十进制浮点数,避免了二进制浮点数运算中的舍入误差。

decimal 模块主要功能是提供高精度的十进制浮点数运算。其主要特性包括:

  • 高精度运算:支持任意精度的十进制数。
  • 精确控制:提供对舍入行为的精确控制。
  • 十进制表示:避免了二进制浮点数表示中的精度丢失问题。

decimal.Decimal 类

Decimal 是 decimal 模块中的核心类,用于表示十进制浮点数。它支持高精度的数学运算。

基本用法

from decimal import Decimal

# 创建 Decimal 对象
d1 = Decimal('0.1')
d2 = Decimal('0.2')

# 运算
result = d1 + d2
print(result)  # 输出: 0.3

构造方法

Decimal(value):从整数、浮点数、字符串或其他 Decimal 对象创建 Decimal 对象。

示例:

from decimal import Decimal

# 从整数
d1 = Decimal(10)  # Decimal('10')

# 从浮点数
d2 = Decimal(0.1)  # Decimal('0.1000000000000000055511151231257827021181583404541015625')

# 从字符串
d3 = Decimal('0.1')  # Decimal('0.1')

舍入和精度

  • getcontext():获取当前的上下文(包括精度和舍入方式)。
  • setcontext():设置当前的上下文。
  • Context:提供对精度、舍入、异常处理等的控制。

示例:设置精度和舍入模式

from decimal import Decimal, getcontext, Context

# 设置精度
getcontext().prec = 4
print(Decimal('1.23456789'))  # 输出: 1.235

# 设置舍入模式
getcontext().rounding = 'ROUND_DOWN'
print(Decimal('1.2345'))  # 输出: 1.234

# 使用自定义上下文
custom_context = Context(prec=2, rounding='ROUND_UP')
with decimal.localcontext(custom_context):
    print(Decimal('1.2345'))  # 输出: 1.24

算术运算

Decimal 类支持各种算术运算,如加法、减法、乘法、除法等。还支持幂运算和对数运算。

示例:

from decimal import Decimal

d1 = Decimal('1.1')
d2 = Decimal('2.2')

# 加法
print(d1 + d2)  # 输出: 3.3

# 减法
print(d1 - d2)  # 输出: -1.1

# 乘法
print(d1 * d2)  # 输出: 2.42

# 除法
print(d1 / d2)  # 输出: 0.5

其他数学函数

  • exp():计算指数。
  • ln():计算自然对数。
  • log10():计算以 10 为底的对数。
  • sqrt():计算平方根。

示例:

from decimal import Decimal

d = Decimal('2')

# 指数
print(d.exp())  # 输出: 7.3890560989306495721704871

# 自然对数
print(d.ln())  # 输出: 0.6931471805599453094172363

# 以 10 为底的对数
print(d.log10())  # 输出: 0.301029995663981

# 平方根
print(d.sqrt())  # 输出: 1.4142135623730950488016887

比较和排序

Decimal 对象支持各种比较操作,如等于、大于、小于等。也支持排序操作。

示例:

from decimal import Decimal

d1 = Decimal('1.1')
d2 = Decimal('1.2')

print(d1 < d2)  # 输出: True
print(d1 == d2) # 输出: False

常用方法

  • is_finite():检查是否是有限值。
  • is_infinite():检查是否是无穷大。
  • is_nan():检查是否是非数(NaN)。
  • is_zero():检查是否是零。

示例:

from decimal import Decimal

d1 = Decimal('1.0')
d2 = Decimal('NaN')

print(d1.is_finite())  # 输出: True
print(d2.is_nan())     # 输出: True 

fractions:分数运算

fractions 模块是 Python 标准库中的一个模块,用于处理有理数(即两个整数之比的数)的数学运算。这个模块提供了一个 Fraction 类,用于表示和操作分数。这种表示方式避免了浮点数运算中的精度问题,并且能够进行精确的数学运算。

创建 Fraction 对象

Fraction 对象可以通过整数、浮点数、字符串或其他 Fraction 对象来创建。

from fractions import Fraction

f1 = Fraction(3)  # 从整数,表示 3/1
f2 = Fraction(2, 5)  # 从两个整数(分子和分母),表示 2/5
f3 = Fraction(0.75)  # 从浮点数(可能会丢失精度),表示 3/4
f4 = Fraction('5/6')  # 从字符串,表示 5/6

示例:

from fractions import Fraction

f1 = Fraction(3)
f2 = Fraction(2, 5)
f3 = Fraction(0.75)
f4 = Fraction('5/6')

print(f1)  # 输出: 3
print(f2)  # 输出: 2/5
print(f3)  # 输出: 3/4
print(f4)  # 输出: 5/6

基本运算

Fraction 类支持加、减、乘、除等基本运算,还支持混合运算。

示例:

from fractions import Fraction

f1 = Fraction(1, 2)
f2 = Fraction(1, 3)

# 加法
print(f1 + f2)  # 输出: 5/6

# 减法
print(f1 - f2)  # 输出: 1/6

# 乘法
print(f1 * f2)  # 输出: 1/6

# 除法
print(f1 / f2)  # 输出: 3/2

比较操作

Fraction 类支持各种比较操作,如等于、大于、小于等。

示例:

from fractions import Fraction

f1 = Fraction(1, 2)
f2 = Fraction(2, 3)

print(f1 < f2)  # 输出: True
print(f1 == f2) # 输出: False
print(f1 <= f2) # 输出: True

属性和方法

  • numerator:返回分数的分子。
  • denominator:返回分数的分母。
  • limit_denominator(max_denominator=1000000):将分数近似为具有指定最大分母的最接近的有理数。
  • float():将分数转换为浮点数。
  • as_integer_ratio():返回分数的整数表示形式。

示例:

from fractions import Fraction

f = Fraction(22, 7)

print(f.numerator)       # 输出: 22
print(f.denominator)     # 输出: 7
print(f.limit_denominator(10))  # 输出: 22/7
print(float(f))          # 输出: 3.142857142857143
print(f.as_integer_ratio())  # 输出: (22, 7)

math:数学函数

math 模块是 Python 标准库中的一个模块,提供了许多与数学运算相关的函数和常量。这些函数和常量包括基本的数学运算、三角函数、对数函数、常量以及其他数学相关的操作。math 模块的设计旨在提供高效的数学计算功能,并且大多数函数是针对浮点数的。

常量

  • pi:圆周率 π,约等于 3.14159。
  • e:自然对数的底 e,约等于 2.71828。
  • tau:2π,圆周率的两倍,约等于 6.28318。
  • inf:表示正无穷大。
  • nan:表示非数(Not a Number)。

基础数学运算

  • ceil(x):返回大于或等于 x 的最小整数。
  • floor(x):返回小于或等于 x 的最大整数。
  • trunc(x):返回 x 的整数部分(向零取整)。
  • fabs(x):返回 x 的绝对值。
  • factorial(x):返回 x 的阶乘(x 为非负整数)。

幂运算

  • pow(x, y):返回 x 的 y 次方。
  • sqrt(x):返回 x 的平方根。
  • cbrt(x):返回 x 的立方根(Python 3.11+ 提供)。

三角函数

  • sin(x):返回 x 的正弦值(x 为弧度)。
  • cos(x):返回 x 的余弦值(x 为弧度)。
  • tan(x):返回 x 的正切值(x 为弧度)。
  • asin(x):返回 x 的反正弦值(弧度)。
  • acos(x):返回 x 的反余弦值(弧度)。
  • atan(x):返回 x 的反正切值(弧度)。
  • atan2(y, x):返回 (x, y) 点的反正切值,结果范围是 [-π, π]。

对数函数

  • log(x, base):返回 x 的以 base 为底的对数。默认 base 为 e。
  • log10(x):返回 x 的以 10 为底的对数。
  • log2(x):返回 x 的以 2 为底的对数。

双曲函数

  • sinh(x):返回 x 的双曲正弦值。
  • cosh(x):返回 x 的双曲余弦值。
  • tanh(x):返回 x 的双曲正切值。
  • asinh(x):返回 x 的反双曲正弦值。
  • acosh(x):返回 x 的反双曲余弦值。
  • atanh(x):返回 x 的反双曲正切值。

其他数学函数

  • degrees(x):将弧度转换为角度。
  • radians(x):将角度转换为弧度。
  • gamma(x):返回 x 的伽马函数值(x > 0)。
  • lgamma(x):返回 x 的伽马函数值的自然对数。

cmath:复数数学函数

cmath 模块是 Python 标准库中的一个模块,用于处理复数的数学运算。它提供了复数的数学函数,这些函数与 math 模块类似,但适用于复数(即包含实部和虚部的数值)。

主要常量

  • pi:圆周率 π,约等于 3.14159。
  • e:自然对数的底 e,约等于 2.71828。

基础复数运算

  • polar(z):将复数 z 转换为极坐标形式,返回模(绝对值)和相位(角度)组成的元组。
  • rect(r, phi):将极坐标形式转换为复数形式,r 为模,phi 为相位(弧度)。

复数的绝对值和相位

  • phase(z):返回复数 z 的相位(角度)。

复数的基本运算

  • exp(z):返回复数 z 的指数。
  • log(z, base):返回复数 z 的对数,base 为对数的底,默认以 e 为底。
  • log10(z):返回复数 z 的以 10 为底的对数。
  • sqrt(z):返回复数 z 的平方根。
  • conj(z):返回复数 z 的共轭复数。

三角函数

  • sin(z):返回复数 z 的正弦值。
  • cos(z):返回复数 z 的余弦值。
  • tan(z):返回复数 z 的正切值。
  • asin(z):返回复数 z 的反正弦值。
  • acos(z):返回复数 z 的反余弦值。
  • atan(z):返回复数 z 的反正切值。

双曲函数

  • sinh(z):返回复数 z 的双曲正弦值。
  • cosh(z):返回复数 z 的双曲余弦值。
  • tanh(z):返回复数 z 的双曲正切值。
  • asinh(z):返回复数 z 的反双曲正弦值。
  • acosh(z):返回复数 z 的反双曲余弦值。
  • atanh(z):返回复数 z 的反双曲正切值。

random:生成伪随机数

random 模块是 Python 标准库中的一个模块,提供了生成随机数的功能。它支持多种生成随机数的方法和算法,包括随机选择、随机打乱、随机采样等。这个模块对于需要随机性和非确定性数据的应用非常有用,例如模拟、游戏开发、数据分析等。

生成随机数

  • random():返回一个 [0.0, 1.0) 区间内的随机浮点数。
  • uniform(a, b):返回一个 [a, b] 区间内的随机浮点数。
  • randint(a, b):返回一个 [a, b] 区间内的随机整数,包括 a 和 b。
  • randrange(start, stop, step):从指定范围内返回一个随机整数,范围是 [start, stop) 并且步长为 step。

随机选择

  • choice(seq):从序列 seq 中随机选择一个元素。
  • choices(population, weights=None, k=1):从 population 中随机选择 k 个元素,weights 可选,为每个元素分配权重。
  • sample(population, k):从 population 中随机选择 k 个唯一的元素(不重复)。

随机打乱

  • shuffle(x):随机打乱列表 x 中的元素。

生成随机分布

  • gauss(mu, sigma):生成一个符合高斯分布(正态分布)的随机数,mu 为均值,sigma 为标准差。
  • expovariate(lambd):生成一个符合指数分布的随机数,lambd 是分布的倒数(λ的值)。
  • betavariate(alpha, beta):生成一个符合贝塔分布的随机数,alpha 和 beta 是分布的两个参数。

随机种子

  • seed(a=None):初始化随机数生成器的种子。如果给定相同的种子值,则每次生成的随机数序列都相同。
  • getstate():返回当前随机数生成器的状态。
  • setstate(state):设置随机数生成器的状态。

 

statistics:基本统计功能

statistics 模块是 Python 标准库中的一个模块,提供了用于统计运算的函数。这些函数包括计算基本的统计量,如均值、中位数、方差等,以及其他一些统计分析的工具。statistics 模块主要用于数据分析和统计学计算,特别是在需要对数据集进行基本统计分析时非常有用。

statistics 模块主要提供了以下功能:

  • 计算基本统计量:如均值、中位数、众数等。
  • 计算数据分布的离散程度:如方差、标准差等。
  • 处理不同类型的统计数据:包括样本数据和总体数据。

计算均值

  • mean(data):计算数据集 data 的算术平均值(均值)。

计算中位数

  • median(data):计算数据集 data 的中位数。
  • median_low(data):计算数据集 data 的中位数,若数据集大小为偶数,则返回较小的中位数。
  • median_high(data):计算数据集 data 的中位数,若数据集大小为偶数,则返回较大的中位数。
  • median_grouped(data, interval=1):计算数据集 data 的分组中位数,interval 为分组区间长度。

计算众数

  • mode(data):计算数据集 data 的众数,即出现频率最高的值。
  • multimode(data):计算数据集 data 的所有众数,返回一个列表。

计算离散程度

  • variance(data, xbar=None):计算数据集 data 的样本方差,xbar 是数据集的均值(可选)。
  • pvariance(data, mu=None):计算数据集 data 的总体方差,mu 是数据集的均值(可选)。
  • stdev(data, xbar=None):计算数据集 data 的样本标准差,xbar 是数据集的均值(可选)。
  • pstdev(data, mu=None):计算数据集 data 的总体标准差,mu 是数据集的均值(可选)。

计算其他统计量

  • summed(data):计算数据集 data 的总和(和)。
  • harmonic_mean(data):计算数据集 data 的调和均值。
  • gmean(data):计算数据集 data 的几何均值。
  • tmean(data):计算数据集 data 的截尾均值。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注