【ChatBot开发笔记】随机数种

随机数种

计算机内的随机都是伪随机,python就是基于Mersenne Twister。
Mersenne Twister是现存最广泛测试的随机数发生器之一,但是它是完全确定的。在python中如果直接使用random.random(),那可以获取到均匀的随机数(随机数种随机),也可以可以通过设置随机数种然后调用random.random(),来得到完全一样的随机数,所以它并不适合安全用途。

实验总需要打乱数据来操作,但如果每次都打乱数据后与上一次数据有差异,则实验结果没办法复现,改进的DEBUG也会变得困难,故设定随机种子,使得打乱过程不是完全随机的,而是以指定的方式打乱。

系统的随机数种
import random

random.seed(1)
print('随机数1:',random.random(),"    (seed 1)")
random.seed(1)
print('随机数2:',random.random(),"    (seed 1)")
random.seed(1.1) 
print('随机数3:',random.random(),"    (seed 1.1)")
random.seed(1.1)
print('随机数4:',random.random(),"    (seed 1.1)")
random.seed(3.456)
print('随机数5:',random.random(),"    (seed 3.456)")
random.seed()
print('随机数6:',random.random(),"    (no seed)")
print('随机数7:',random.random(),"    (no seed)")
print('随机数8:',random.random(),"    (no seed)")
print('随机数9:',random.random(),"    (no seed)")
random.seed(1)
print('随机数10:',random.random(),"    (seed1)")

随机数10.13436424411240122     (seed 1)
随机数20.13436424411240122     (seed 1)
随机数30.22415427849366876     (seed 1.1)
随机数40.22415427849366876     (seed 1.1)
随机数50.7812229172936054     (seed 3.456)
随机数60.8903081131998817     (no seed)
随机数70.6682693570457604     (no seed)
随机数80.4221332899465733     (no seed)
随机数90.8824663095554685     (no seed)
随机数100.13436424411240122     (seed1)
numpy的随机数种
import numpy as np

np.random.seed(0)
print(np.random.rand(4,3))

print("***********************************")

np.random.seed(0)
print(np.random.rand(4,3))


[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]
 [0.43758721 0.891773   0.96366276]
 [0.38344152 0.79172504 0.52889492]]
***********************************
[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]
 [0.43758721 0.891773   0.96366276]
 [0.38344152 0.79172504 0.52889492]]
随机数工具1
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import random
import string

# 随机整数:
print (random.randint(1,50))

# 随机选取0到100间的偶数:
print (random.randrange(0, 101, 2))

# 随机浮点数:
print (random.random())
print (random.uniform(1, 10))

# 随机字符:
print (random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()'))

# 多个字符中生成指定数量的随机字符:
print (random.sample('zyxwvutsrqponmlkjihgfedcba',5))

# 从a-zA-Z0-9生成指定数量的随机字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print (ran_str)

# 多个字符中选取指定数量的字符组成新字符串:
print (''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)))

# 随机选取字符串:
print (random.choice(['剪刀', '石头', '布']))

# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print (random.shuffle(items))

42
96
0.8633618894417576
6.686603838697243
w
['e', 't', 'w', 'k', 'a']
rP2lyYKI
cqrxo
布
None
随机数工具1
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import random
import string

# 随机整数:
print (random.randint(1,50))

# 随机选取0到100间的偶数:
print (random.randrange(0, 101, 2))

# 随机浮点数:
print (random.random())
print (random.uniform(1, 10))

# 随机字符:
print (random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()'))

# 多个字符中生成指定数量的随机字符:
print (random.sample('zyxwvutsrqponmlkjihgfedcba',5))

# 从a-zA-Z0-9生成指定数量的随机字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print (ran_str)

# 多个字符中选取指定数量的字符组成新字符串:
print (''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)))

# 随机选取字符串:
print (random.choice(['剪刀', '石头', '布']))

# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print (random.shuffle(items))

42
96
0.8633618894417576
6.686603838697243
w
['e', 't', 'w', 'k', 'a']
rP2lyYKI
cqrxo
布
None
随机数工具1
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import random
import string

# 随机整数:
print (random.randint(1,50))

# 随机选取0到100间的偶数:
print (random.randrange(0, 101, 2))

# 随机浮点数:
print (random.random())
print (random.uniform(1, 10))

# 随机字符:
print (random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()'))

# 多个字符中生成指定数量的随机字符:
print (random.sample('zyxwvutsrqponmlkjihgfedcba',5))

# 从a-zA-Z0-9生成指定数量的随机字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print (ran_str)

# 多个字符中选取指定数量的字符组成新字符串:
print (''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)))

# 随机选取字符串:
print (random.choice(['剪刀', '石头', '布']))

# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print (random.shuffle(items))

42
96
0.8633618894417576
6.686603838697243
w
['e', 't', 'w', 'k', 'a']
rP2lyYKI
cqrxo
布
None
随机数工具1
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import random
import string

# 随机整数:
print (random.randint(1,50))

# 随机选取0到100间的偶数:
print (random.randrange(0, 101, 2))

# 随机浮点数:
print (random.random())
print (random.uniform(1, 10))

# 随机字符:
print (random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()'))

# 多个字符中生成指定数量的随机字符:
print (random.sample('zyxwvutsrqponmlkjihgfedcba',5))

# 从a-zA-Z0-9生成指定数量的随机字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print (ran_str)

# 多个字符中选取指定数量的字符组成新字符串:
print (''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)))

# 随机选取字符串:
print (random.choice(['剪刀', '石头', '布']))

# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print (random.shuffle(items))

42
96
0.8633618894417576
6.686603838697243
w
['e', 't', 'w', 'k', 'a']
rP2lyYKI
cqrxo
布
None
随机数工具2
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import random

print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数  
print( random.random() )             # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数

a=[1,3,5,6,7]                # 将序列a中的元素顺序打乱
random.shuffle(a)
print(a)

6
0.3719465925363282
5.102804982225576
t
13
[3, 6, 1, 5, 7]
本项目的随机数种设置方法,统一为666
def set_random_seed(args):
    """
    设置训练的随机种子
    """
    # 为CPU设置种子
    torch.manual_seed(args.seed)
    # 为python内置random函数设置种子
    random.seed(args.seed)
    # 为numpy的random函数设置种子
    np.random.seed(args.seed)

    # 是否调用cuDNN 的 auto-tuner
    if args.cuda:
        # 拒绝计算随机性
        torch.backends.cudnn.deterministic = True
        torch.backends.cudnn.benchmark = False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值