math random模块

math --- 数学函数

该模块提供了对C标准定义的数学函数的访问,返回值除非有明确说明,否则所有返回值均为浮点数

math.ceil(x)
      返回 x 的上限,即大于或者等于 x 的最小整数。
      如果 x 不是一个浮点数,则委托 x.__ceil__(), 返回一个 Integral 类的值

>>> math.ceil(3.000000000000001)
4
>>> math.ceil(3.0000000000000001)
3

math.floor(x)
      返回 x 的向下取整,小于或等于 x 的最大整数。
      如果 x 不是浮点数,则委托 x.__floor__() ,它应返回 Integral 值

math.pow(x, y)
      将返回 x 的 y 次幂。
      特殊情况尽可能遵循C99标准的附录'F'。
      特别是, pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0 ,即使 x 是零或NaN。 
      如果 x 和 y 都是有限的, x 是负数, y 不是整数那么 pow(x, y) 是未定义的,并且引发 ValueError 。

      与内置的 ** 运算符不同, math.pow() 将其参数转换为 float 类型。
      使用 ** 或内置的 pow() 函数来计算精确的整数幂。

>>> float('nan')
nan
>>> x = float('nan')
>>> math.pow(1.0, x)
1.0
>>> 
>>> math.pow(x, 0.0)
1.0

math.sqrt(x)
      返回 x 的平方根

math.fabs(x)
      返回 x 的绝对值

math.modf(x)
      返回 x 的小数和整数部分。两个结果都带有 x 的符号并且是浮点数

>>> x = math.pi
>>> a, b = math.modf(x)
>>> a, b
(0.14159265358979312, 3.0)

math.copysign(x, y)
      返回一个基于 x 的绝对值和 y 的符号的浮点数。
      在支持带符号零的平台上,copysign(1.0, -0.0) 返回 -1.0.

>>> math.copysign(-2.0, 1)
2.0

math.fsum(iterable)
      返回迭代中的精确浮点值。通过跟踪多个中间部分和来避免精度损失

>>> x = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] 
>>> sum(x)
0.9999999999999999
>>> math.fsum(x)
1.0

random --- 生成伪随机数

该模块实现了各种分布的伪随机数生成器
random.random()
      返回 [0.0, 1.0) 范围内的下一个随机浮点数

>>> random.random()
0.07695673120939395

random.randrange(stop)
random.randrange(start, stop[, step])
      从 range(start, stop, step) 返回一个随机选择的元素。 
      这相当于 choice(range(start, stop, step)) ,但实际上并没有构建一个 range 对象
# 就只能在1,3这两个元素中选择了
>>> random.randrange(1, 5, 2)
3

[a, b]区间选择随机数
random.randint(a, b)
      返回随机整数 N 满足 a <= N <= b。相当于 randrange(a, b+1)

random.uniform(a, b)
      返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a 。
      取决于等式 a + (b-a) * random() 中的浮点舍入,终点 b 可以包括或不包括在该范围内

random.choice(seq)
      从非空序列 seq 返回一个随机元素。 如果 seq 为空,则引发 IndexError

>>> x
[10, 7, 5, 8, 8] 
>>> random.choice(x)
8
>>> random.choice(x)
7

andom.sample(population, k)
      返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。
      返回包含来自总体的元素的新列表,同时保持原始总体不变。 
      结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。 这允许抽奖获奖者(样本)被划分为大奖和第二名获胜者(子切片)。
      总体成员不必是 hashable 或 unique 。 如果总体包含重复,则每次出现都是样本中可能的选择。
      要从一系列整数中选择样本,请使用 range() 对象作为参数。 对于从大量人群中采样,这种方法特别快速且节省空间:sample(range(10000000), k=60) 。
      如果样本大小大于总体大小,则引发 ValueError

>>> x = list(range(100))
>>> random.sample(x, 10)
[26, 42, 78, 12, 91, 11, 14, 85, 92, 47]

random.shuffle(x[, random])
      将序列 x 随机打乱位置。
      可选参数 random 是一个0参数函数,
      在 [0.0, 1.0) 中返回随机浮点数;默认情况下,这是函数 random() 。
      
      要改变一个不可变的序列并返回一个新的打乱列表,请使用``sample(x, k=len(x))``。
      
      请注意,即使对于小的 len(x),x 的排列总数也可以快速增长,大于大多数随机数生成器的周期。 
      这意味着长序列的大多数排列永远不会产生。 例如,长度为2080的序列是可以在 Mersenne Twister 随机数生成器的周期内拟合的最大序列

>>> x = list(range(6))
>>> random.shuffle(x)
>>> x
[3, 0, 1, 4, 2, 5]
posted @ 2021-02-08 12:04  EdenWu  阅读(74)  评论(0编辑  收藏  举报