1.基础random库
伪随机数:计算机中通过采用梅森旋转算法生成的(伪)随机序列元素,Python中产生随机数使用随机数种子来产生 (只要种子相同,产生的随机序列,无论是每一个数,还是数与数之间的关系都是确定的,所以随机数种子确定了随机序列的产生)
因为是标准库,使用时候只需要import random
random库包含两类函数,常用的共8个
--基本随机函数: seed(), random()
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 |
random() | 生成一个[0.0,1.0)之间的随机小数 |
--扩展随机函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()
randint(a,b) | 生成一个[a,b]之间的整数 |
randrange(m,n,k) | 生成一个[m,n)之间以k为步长的随机整数 |
getrandbits(k) | 生成一个k比特长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(seq) | 从序列中随机选择一个元素 random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9]) |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 |
2.numpy中的random库
常见随机数产生:
np.random.rand(d0,d1,..dn) | 建立d0,d1...dn维随机数数组,其元素是浮点数,[0,1)均匀分布 |
np.random.randn(d0,d1,..dn) | 建立d0,d1...dn维随机数数组,其元素是浮点数,标准正态分布 |
np.random.randint(low[,high,shape]) | 根据shape创建随机整数数组,[low,high),若high=none,则为[0,low) |
np.random.random_integers(low[,high,size]) | 生成闭区间[low,high]上离散均匀分布的整数值;若high=None,则取值区间变为[1,low] |
np.random.seed(s) | s是给定种子 |
a=np.random.randn(2,3)
b=np.random.randint(5,size=(2,3))
若要将【a,b】区间分成N等分,也可以用此函数实现
a+(b-a)*(numpy.random.random_integers(N)-1)/(N-1)
对数组进行顺序打乱:
np.random.shuffle() | 多维矩阵中,只对第一维(行)做打乱顺序操作 训练时会对样本顺序进行打乱 |
np.random.permutation() | 与shuffle类似,只是不改变原数组 |
np.random.choice(a[,size,replace,p]) | 若a为数组,则从a中选取元素;若a为单个int类型数,则选取range(a)中的数 replace是bool类型,为True,则选取的元素会出现重复;反之不会出现重复 p为数组,里面存放选到每个数的可能性,即概率 |
a=np.random.randint(100,200,(3,4))
a
Out[102]:
array([[115, 153, 180, 127],
[144, 177, 175, 165],
[147, 130, 184, 186]])
np.random.shuffle(a)
a //改变了a本身,并且是对第一维整体进行打乱
Out[104]:
array([[147, 130, 184, 186],
[115, 153, 180, 127],
[144, 177, 175, 165]])
产生常见且特殊分布:
np.random.uniform(low,high,size) | 产生具有均匀分布的数组 |
np.random.normal(loc,scale,size) | 产生具有正太分布的数组,loc均值,scale标准差,size形状 |
np.random.poisson(lam,size) | 产生具有泊松分布的数组,lam是随机事件发生概率,size形状 |