python进阶——random模块的常用方法

  1. betavariate贝塔分布

贝塔分布可以看作是一个概率的概率分布,例如一个射击员历史命中率为0.39,在一次比赛中,他射中了,可以说他的命中率是百分之百吗?当然不能,因为数据太少,所以需要用到先验概率。在该射击员没有比赛之前我们就有了他的命中率范围。
贝塔分布的数学期望为:

参数:


用途:从贝塔分布中随机返回一个值,范围在0到1之间

  1. choice
    参数:seq 可迭代对象
    用途: 随机返回可迭代对象的一个元素,对象不能为空,若为空会报错
    例子:
print(random.choice('hello'))  # l 只是这次返回l哦,重新执行会随机返回其他的,但只会是h e l o中的任意一个
print(random.choice([]))  # IndexError: Cannot choose from an empty sequence
  1. choices
    参数:
    population:可迭代对象
    weights:权重,列表或元祖,元素类型为float
    cum_weights:累加权重,列表或元祖,元素类型为float
    k:选取次数,类型为int
    用途: 从可迭代对象中选取k次数据,根据设置的权重计算,最终返回一个列表
    例子:
'''
    不设置权重的情况下输出10000次,并记录各个元素出现的频率
    '''
    num = [1,2,6,9,10]
    result = random.choices(num,k=10000)
    for i in num:
        print('%d出现的频率为:%f'%(i,result.count(i)/10000))
    '''
    1出现的频率为:0.197300
    2出现的频率为:0.199500
    6出现的频率为:0.205500
    9出现的频率为:0.200100
    10出现的频率为:0.197600
    通过结果可以看出频率还是很平均的,各个元素出现的频率大体一致
    '''
————————————————————————————————————————
'''
    设置权重weights为[0.1,0.2,0.3,0.3,0.1]的情况下输出10000次,并记录各个元素出现的频率
    '''
    num = [1, 2, 6, 9, 10]
    weight = [0.1,0.2,0.3,0.3,0.1]
    result = random.choices(num,weights=weight,k=10000)
    for i in num:
        print('%d出现的频率为:%f'%(i,result.count(i)/10000))
    '''
    1出现的频率为:0.100000
    2出现的频率为:0.197800
    6出现的频率为:0.307200
    9出现的频率为:0.298600
    10出现的频率为:0.096400
    从结果可以看出,每个元素的频率接近于它们的权重
    '''
——————————————————————————————————————
'''
    设置累加权重[0.1,0.2,0.3,0.3,0.1]的情况下输出10000次,并记录各个元素出现的频率
    '''
    num = [1, 2, 6, 9, 10]
    cum_weight = [1,2,3,4,5]
    result = random.choices(num, cum_weights=cum_weight,k=10000)
    for i in num:
        print('%d出现的频率为:%f' % (i, result.count(i) / 10000))
    '''
    cum_weight = [1,5,3,4,5] 反推weight为[1,1,1,1,1]
    所以结果为:
    1出现的频率为:0.193400
    2出现的频率为:0.203000
    6出现的频率为:0.199700
    9出现的频率为:0.200400
    10出现的频率为:0.203500
    '''
  1. expovariate
    参数: float类型
    用途:返回指数分布的随机浮点数
  2. gauss
    参数:


    用途:返回高斯分布的随机浮点数
  3. gammavariate
    参数:
    alpha:
    beta:
    用途:返回gamma分布的随机浮点数
  4. getstate
    参数:
    用途:
    例子:

  1. getrandbits
    参数:k int类型
    用途: 返回k位长的随机整数。
    例子:
'''
    4位长的数字为0-15,输出100次,看结果是什么
    '''
    result = set()
    for i in range(100):
        result.add(random.getrandbits(4))
    print(result)  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
  1. lognormvariate
    参数:


    用途: 返回对数正态分布的随机浮点数
  2. normalvariate
    参数:


    用途: 返回正态分布的随机浮点数
  3. paretovariate
    参数:
    用途: 返回帕累托分布的随机浮点数
  4. randrange
    参数:
    start:开始数a
    stop:结束数b
    step:步长k
    用途: [a , a+k,a+2k,……,b)随机返回该序列中的一个值,如果不指定a或k则默认为0
    例子:
    print(random.randrange(1,4,2))  # 只能在1,3中随机返回一个值
  1. random
    参数:无
    用途:随机生成一个[0,1]的浮点数

  2. randint
    参数:
    a:int
    b:int
    用途:随机生成[a,b]范围内的一个整数
    例子:

result_set = set()
    for i in range(100):
        result_set.add(random.randint(1, 3))  
    print(result_set)  # {1, 2, 3}
  1. seed
    参数:
    a:
    version:int
    用途:a为改变随机数生成器的种子,如果使用固定的a,则每次生成的随机数相同;如果不设置a,则系统根据时间自己动态设置,此时每次生成的随机数会因时间差异而不同。
    例子:
random.seed(1)
print(random.random())  # 0.13436424411240122
'''
无论执行多少次这个值都不会变
'''
  1. sample
    参数:
    population:可迭代对象
    k:每次选取的元素个数
    用途:每次从可迭代对象中随机挑选k个元素封装在一个列表里返回
    例子:
population = [1,2,6,9,10]
print(random.sample(population=population,k=2))

sample和choices中的k的区别:sample为只挑选一次,一次挑选k个元素。choices为挑选k次,一次只挑选一个元素

  1. shuffle
    参数:lst:列表【只能是list类型,元组、字符串、集合等都不行】
    用途:随机打乱序列lst的顺序并重新排序,无返回值,另外lst只能是一个可变序列,且只支持有下标的序列
    例子:
lis = [1,3,6]
print(random.shuffle(lis))
print(lis)  # [6,1,3]
  1. setstate
    参数:
    用途:
    例子:

  1. triangular
    参数:
    low:float
    high:float
    mode:
    用途: 返回low和high之间的随机浮点数,如果指定mode 参数,mode的取值会使其更接近其他两个参数值之一。mode参数默认为其他两个参数值之间的中点,此时它将不会权衡任何方向的可能结果。
    例子:
a = 1.0
    b = 4.0
    max_ab = 0
    min_ab = 0
    equ_ab = 0
    for i in range(100):
        num = random.triangular(a, b, (a+b)/2)
        if num > (b+a)/2:
            max_ab += 1
        elif num < (b+a)/2:
            min_ab += 1
        else:
            equ_ab += 1
    print('接近b有%d次'%max_ab)
    print('接近a有%d次' % min_ab)
    print('在中间有%d次' % equ_ab)
    '''
    mode默认为(a+b)/2,此时结果为:
    接近b有43次
    接近a有57次
    在中间有0次
    当mode=(a+b)/2+1时,结果为:
    接近b有69次
    接近a有31次
    在中间有0次
    当mode=(a+b)/2-1时,结果为:
    接近b有26次
    接近a有74次
    在中间有0次
    '''
  1. uniform
    参数:
    a:float
    b:float
    用途:返回a,b之间的随机一个浮点数,这里的a可以小于b
  2. vonmisesvariate
    参数:


    用途: 返回具有von Mises分布或圆形正态分布的随机浮点数。
  3. weibullvariate
    参数:


    用途: 返回Weibull分布的随机浮点数

你可能感兴趣的:(python进阶——random模块的常用方法)