文章目录
- 数学模块
- math模块
- decimal 模块
- random 模块
数学模块
Python 中数学相关模块,如下所示:
相对比较常用的模块:math、decimal 和 random。
模块 | 描述 |
---|---|
math | 提供了对 C 标准定义的数学函数的访问(不适用于复数) |
decimal | 为快速正确舍入的十进制浮点运算提供支持 |
random | 实现各种分布的伪随机数生成器 |
cmath | 提供了一些关于复数的数学函数 |
fractions | 为分数运算提供支持 |
statistics | 提供了用于计算数字数据的数理统计量的函数 |
math模块
首先要先引入数学模块 math
。如下所示:
import math
引入之后就可以使用了,以 math
模块中求平方根函数 sqrt(x)
为例。使用方式如下所示:
import math
math.sqrt(1024)
Python 提供了许多用于数值计算的内置函数,以下是一些常用的:
内置函数 | 描述 | 用例 |
---|---|---|
abs(x) | 返回 x 的绝对值 | abs(-3) = 3 |
pow(x, y[, z]) | 返回 x 的 y 次幂,如果 z 给出,幂结果对 z 取余 | pow(2,3,3) = 2 |
divmod(x, y) | 返回两个数的商和余数 | divmod(10, 3) = (3, 1) |
max(x1, x2,x3, …) | 返回最大值 | max(1, 2, 3, 4) = 4 |
min(x1, x2,x3, …) | 返回最小值 | min(1, 2, 3, 4) = 1 |
round(x[, ndigits]) | 对 x 进行四舍五入,ndigits (可选)表示小数点后保留的位数 | round(3.141, 2) = 3.14 |
sum(iterable[, start]) | 对 iterable 的所有项求和,如果提供 start ,则从 start 开始加 | sum([1, 2, 3, 4, 5]) = 15 |
math
模块中常用的函数。如下表所示:
math模块函数 | 描述 | 用例 |
---|---|---|
math.fabs(x) | 返回 x 的绝对值(浮点数) | math.fabs(1) = 1.0 |
math.ceil(x) | 返回 x 的上入整数 | math.ceil(1.1) = 2 |
math.floor(x) | 返回 x 的下舍整数 | math.floor(1.1) = 1 |
math.fmod(x, y) | 返回 x/y 的余数 | math.fmod(3, 2) = 1.0 |
math.factorial(x) | 返回 x 的阶乘,如果 x 不是整数或为负数时则将引发 ValueError | math.factorial(3) = 5 |
math.pow(x, y) | 返回 x 的 y 次幂,值为浮点数,如: | math.pow(2,3) = 8.0 |
math.fsum(iterable) | 返回迭代器中所有元素的和,值为浮点数 | math.fsum((1, 2, 3)) = 6 |
math.gcd(x, y) | 返回整数 x 和 y 的最大公约数 | math.gcd(4,6) = 2 |
math.sqrt(x) | 返回 x 的平方根,值为浮点数 | math.sqrt(9) = 3.0 |
math.trunc(x) | 返回 x 的整数部分 | math.trunc(1.256) = 1 |
math.exp(x) | 返回 e 的 x 次幂 | math.exp(2) = 7.38… |
math.log(x[, base]) | 返回 x 的对数,底数默认为 e | math.log(8,2) = 3.0 |
常量 | math.e = 2.71… math.pi = 3.14… | |
正余弦等 |
decimal 模块
decimal 模块为正确舍入十进制浮点运算提供了支持,相比内置的浮点类型 float,它能更加精确的控制精度,能够为精度要求较高的金融等领域提供支持。
基本运算
import decimald1 = decimal.Decimal(1.1)
d2 = decimal.Decimal(9.9)
print(d1 + d2)
print(d1 - d2)
print(d1 * d2)
print(d1 / d2)
执行结果:
11.00000000000000044408920985
-8.800000000000000266453525910
10.89000000000000127009514017
0.1111111111111111160952773272
上面结果是用了默认精度,我们重新设置下精度再来看一下:
import decimaldecimal.getcontext().prec = 2 # 设置这个上下文的精度为 2
d1 = decimal.Decimal(1.1)
d2 = decimal.Decimal(9.9)
print(d1 + d2)
print(d1 - d2)
print(d1 * d2)
print(d1 / d2)
执行结果:
11
-8.8
11
0.11
random 模块
random 模块可以生成随机数,我们来看一下其常用函数。
random模块函数 | 描述 | 用例 |
---|---|---|
random.random() | 返回 [0.0, 1.0) 范围内的随机浮点数 | random.random() = 0.374… |
random.uniform(a, b) | 返回一个在 [a, b) 或 (b, a] 范围内的随机浮点数 | random.uniform(1, 10) = 2.597… |
random.randint(a, b) | 返回一个在 [a, b] 范围内的随机整数 | random.randint(1, 10) = 7 |
random.choice(seq) | 从非空序列 seq 返回一个随机元素 | random.choice(‘abcd’) = b |
random.shuffle(seq) | 将序列 seq 中的元素随机打乱,返回 None | |
random.sample(population, k) | 从序列或集合中随机选k个元素组成列表并返回 用于无重复的随机抽样 | random.sample(‘abb’, 3) = [‘b’,‘a’,‘b’] |